题目不难,对算法要求不高,但要仔细考虑一些特殊的测试用例。
1、十进制转十二进制
十进制:1,2,3,4,5,6,7,8,9,10,11 分别对应十二进制1,2,3,4,5,6,7,8,9,A,B
比如输入:34 输出 2A
注意考虑输入:0时应该输出:0,同时可能需要考虑负数的情况(但测试用例好像都是正数,所以单考虑正数也通过了)。
#include<iostream>
#include<string>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
void solve(int num);
int main()
{
int num;
while(cin>>num)
{
solve(num);
}
return 0;
}
void solve(int num)
{
if(num==0)
{
cout<<"0"<<endl;
return;
}
char c;
vector<char> s;
while(num)
{
if(num%12==10)
{
c='A';
}
else if(num%12==11)
{
c='B';
}
else
{
c=num%12+'0';
}
s.push_back(c);
num=num/12;
}
vector<char>::iterator vi;
for(vi=s.end()-1;vi>=s.begin();vi--)
{
cout<<(*vi);
}
cout<<endl;
return;
}
2、缘分匹配度
题目太长了,只记得大概的意思:
给定的男女相亲对数N,输入一个长度为2*N的数组,男生在数组中站的位置往前数组累加和s1,女在数组中站的位置往后数组累加和s2,如果s1==s2说明男女匹配成功。比如对已N=3 输入的数组为3 6 2 4 5 2,男生站第3个位置往前累加和为2+6+3=11,女生站第4个位置往后累加和为4+5+2=11,说明匹配成功;男生站第6个位置往前累加和为2+5+4+2+6+3=22,女生站第1个位置往后累加和为3+6+2+4+5+2=11,说明匹配成功;
输入说明:
第一行输入N;
第二行连续输入n个正整数,注意正整数输入个数要满足n=2*N,否则函数返回-1;
输出说明:
返回输入数组中能匹配成功的对数
3、求字符串中最长回文
输入一串包含空格的字符串,用空格分隔字符串并找出字符串中最长的回文,如果存在多个最长回文,则一同输出,同时各回文间用','号隔开
比如输入:
a aba dd f
a aba dfd hj
对应输出分别为:
aba
aba,dfd
注意:这里的空格可能不止一个(如a aba a)
当时的思路:首先依据空格将各字符串分割出来,然后使用reverse()函数判断每个字符串是否为回文(即翻转后的字符串与原字符串相等,说明该字符串为回文),最后在回文字符串中中找出最长的那个回文字符串。