1 ISBN码
#include <iostream>
using namespace std;
int main()
{
freopen("isbn.in", "r", stdin);
freopen("isbn.out", "w", stdout);
string s;
cin >> s;
int res = (s[0] - 48) * 1 + (s[2] - 48) * 2 + (s[3] - 48) * 3 + (s[4] - 48) * 4 + (s[6] - 48) * 5 + (s[7] - 48) * 6 + (s[8] - 48) * 7 + (s[9] - 48) * 8 + (s[10] - 48) * 9;
res %= 11;
char last = (10 == res) ? 'X' : res + '0';
if(last == s[12])
{
cout << "Right";
}
else
{
s[12] = last;
cout << s;
}
return 0;
}
2 第N个智慧数
本题样例1的输出答案是错误的,应为7,而不是16。
解法一
#include <iostream>
#include <set>
using namespace std;
#define N 50
int main()
{
int n;
cin >> n;
set<int> s; // 使用set可以自动去重
for(int i = 1; i < N; i++)
{
for(int j = i + 1; j < N; j++)
{
s.insert(j * j - i * i);
}
}
// cout << s.size() << endl; 用来测试s里够不够100个数
set<int>::iterator it;
int j = 1;
for(it = s.begin(); it != s.end(); it++, j++)
{
if(j == n)
{
cout << *it << endl;
}
}
return 0;
}
解法二
#include <iostream>
#include <set>
using namespace std;
int a[101];
int main()
{
a[1] = 3;
int i = 2;
for(int j = 1; j < 50; j++)
{
a[i++] = 4 * j + 1;
a[i++] = 4 * j + 3;
a[i++] = 4 * j + 4;
if(i > 100)
{
break;
}
}
// for(int i = 1; i <= 100; i++)
// {
// cout << a[i] << ' ';
// }
int n;
cin >> n;
cout << a[n] << endl;
return 0;
}
3 求第m大的身份证号码
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(string a, string b)
{
string birth1 = a.substr(6, 8);
string birth2 = b.substr(6, 8);
return birth1 < birth2;
}
int main()
{
// freopen("id.in", "r", stdin);
// freopen("id.out", "w", stdout);
int n, m;
cin >> n >> m;
string s[n];
for(int i = 0; i < n; i++)
{
cin >> s[i];
//cout << s[i].substr(6, 8) << endl;
}
sort(s, s + n);
cout << s[m - 1] << endl;
return 0;
}
少儿编程、算法咨询请加微信307591841或QQ群581357582
信息学竞赛公众号.jpg
网友评论