有一个ISBN码(格式为X-XXX-XXXXX-X),其中最后一个数字是识别码,等于前面数字分别*1,*2,*3,*……,*9再求和,并且对11求余。对这个结果,我们把它叫做识别码。给定一个ISBN码,判断ISBN码是否正确。
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
// 输入ISBN码
char isbn[15] = {};
for (int i = 0; i < 13; i++)
{
cin >> isbn[i];
}
// 把ISBN码中的数字字符都转换为数字,并存放到整形数组中
int isbn2[15] = {};
int ind = 0;
for (int i = 0; i < 13; i++)
{
if (isbn[i] != '-')
{
isbn2[ind++] = isbn[i] - 48;
}
}
// 计算ISBN码中数字*n的总和
int sum = 0;
for (int ind = 0, i = 1; ind < 9; ind++, i++)
{
sum += isbn2[ind] * i;
}
// 求余,mod表示识别码
int mod = 0;
mod = sum % 11;
// 将识别码编程整型数字
if (isbn[12] == 'X')
{
isbn[12] = 10;
}
else
{
isbn[12] -= 48;
}
// 判断识别码的正误
if (mod == isbn[12])
{
cout << "Right";
}
else
{
for (int i = 0; i < 12; i++)
{
cout << isbn[i];
}
if (mod == 10)
{
cout << "X";
}
else
{
cout << mod;
}
}
return 0;
}
核心思路都在上面了哦~大家看一下就好喽。
输入一个不带空格的字符串str,输出在字符串str中第一个只出现一次的字符。如果没有输出NO。
#include <iostream>
#include <string>
using namespace std;
int main()
{
// 输入字符串str
string s;
cin >> s;
// 两个指针i和j遍历s
int len = s.length();
for (int i = 0; i < len; i++)
{
int j;
for (j = 0; j < len; j++)
{
if (s[i] == s[j] && i != j) // 说明找到了一个出现两次的字符
{
break;
}
}
if (j == len)
{
cout << s[i];
return 0;
}
}
// 没有则输出NO
cout << "NO";
return 0;
}