题目来源:牛客竞赛语法入门班选择结构习题
题目链接:https://ac.nowcoder.com/acm/contest/19304?from=acdiscuss
2021-08-13 15:00:00 至 2021-08-17 22:00:00
时长: 4天7小时
选择结构程序设计
A 比大小
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
比较整数a和整数b的大小。
输入描述:
输入一行两个整数,由空格隔开,分别代表整数a、b的值
(1<=a,b<=10000)
输出描述:
若a比b小,输出"<"
若a与b相等,输出"="
若a比b大,输出">"
实际输出中,不包含双引号
示例1
输入
1 2
输出
<
示例2
输入
1 1
输出
=
示例3
输入
2 1
输出
>
AC Code
#include "bits/stdc++.h"
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
if (a < b) cout << "<" << endl;
else if (a == b) cout << "=" << endl;
else cout << ">" << endl;
return 0;
}
B 卡拉兹函数
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
卡拉兹函数是怎么回事呢?卡拉兹相信大家都很熟悉,但是卡拉兹函数是怎么回事呢,下面就让小编带大家一起了解吧。
卡拉兹函数,其实就是当n是奇数时,输出3*n+1,当n是偶数时,输出n/2,大家可能会很惊讶卡拉兹怎么会是函数呢?但事实就是这样,小编也感到非常惊讶。
这就是关于卡拉兹函数的事情了,大家有什么想法呢,欢迎在评论区告诉小编一起讨论哦!
输入描述:
一个不超过105的正整数n
输出描述:
一行一个整数k。当n是奇数时,k=3*n+1,当n是偶数时,k=n/2。
示例1
输入
1
输出
4
说明
示例2
输入
2
输出
1
AC Code
#include "bits/stdc++.h"
using namespace std;
int main()
{
int n;
cin >> n;
if(n & 1) cout << 3 * n + 1;
if(n % 2 == 0) cout << n / 2;
return 0;
}
C 默契
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
经过无数次Wa~~以后,小财终于理解了二分查找,终于可以出去玩了。
正好这时小金来找他玩猜数字的游戏,
每个人随即说出一个数字,若两数字相等输出“Tacit!”(不包括引号),否则输出“No Tacit!”(不包括引号)。
输入描述:
两个整数x 和 y(在int范围内),分别代表小金和小财说出的数字。
输出描述:
一行,按照题目表示这两个数字的关系。
示例1
输入
1 10
输出
No Tacit!
示例2
输入
0 0
输出
Tacit!
备注:
注意输出的符号,肉眼看不到的并不代表没区别
AC Code
#include "bits/stdc++.h"
using namespace std;
int main()
{
int x, y;
cin >> x >> y;
if (x == y) cout << "Tacit!" << endl;
if (x != y) cout << "No Tacit!" << endl;
return 0;
}
D 整除判断
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
乎乎学会了除法,他想知道整数m能否被整数n整除。
输入描述:
输入仅一行,有两个整数(范围1 ~231-1),第一个为m,第二个为n。
输出描述:
输出仅一行,m 能被 n 整除输出 YES,否则输出 NO。
示例1
输入
36 6
输出
YES
AC Code
#include "bits/stdc++.h"
using namespace std;
int main()
{
int m, n;
cin >> m >> n;
if (m % n == 0) {
cout << "YES" << endl;
}
else {
cout << "NO" << endl;
}
return 0;
}
E CSimplemathproblem
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 65536K,其他语言131072K
64bit IO Format: %lld
题目描述
这一节课,Priest给大家做了一个小测试。
老师给了你两个正整数X, Y。并按照一下规则做运算,求出答案Z。
如果X是Y的因数,则Z等于X + Y。否则Z = Y - X。
输入描述:
输入两个正整数X, Y。 (1 <= X <= Y <= 100000000000000)。
输出描述:
输出你的答案Z。
示例1
输入
4 12
输出
16
示例2
输入
8 20
输出
12
示例3
输入
7 100000000000
输出
99999999993
AC Code
#include "bits/stdc++.h"
using namespace std;
int main()
{
long long int x, y;
cin >> x >> y;
if (y % x == 0) {
cout << x + y;
}
else {
cout << y - x;
}
return 0;
}
F 吃瓜群众
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
群众想要吃瓜,于是给你一个瓜让你切,但是作为考验
告诉你西瓜的重量,问你能否将这个西瓜分成两部分,每个部分都是偶数。
注意:这里说的是能否分成两部分,不是能否平均分成两部分
输入描述:
输入一行,包含一个整数weight,表示西瓜的重量1 <= weight <= 100
输出描述:
输出一行,见样例。
示例1
输入
8
输出
YES, you can divide the watermelon into two even parts.
示例2
输入
3
输出
NO, you can't divide the watermelon into two even parts.
备注:
要注意检查你的输出格式要跟样例输出一模一样才能通过,尤其别忘了句子最后的小点哦
AC Code
#include "bits/stdc++.h"
using namespace std;
int main()
{
int w;
cin >> w;
if (w % 2 == 0 && w != 2) {
cout << "YES, you can divide the watermelon into two even parts." << endl;
}
else {
cout << "NO, you can't divide the watermelon into two even parts." << endl;
}
return 0;
}
G jyq跳格子
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
担心大学生活过于苦闷,出题人决定带着大家一起玩起来!
当然,想要成为优秀的ccnuacmer,”简单”的脑力热身活动必不可少。
给出连续的n个格子,编号为1~n,游戏开始时,位于编号为1的格子上,每次可以任意选择跳两格或者跳四格。跳跃次数无限制。判断是否能够恰好到达终点。
输入描述:
一个正整数n,代表格子的数量
1\le n \le 10000001≤n≤1000000
输出描述:
若可以恰好到达终点,输出n;否则输出-1;
示例1
输入
5
输出
5
示例2
输入
6
输出
-1
说明
给出 6个格子,初始位置为 1。
第一种方案为, 第一次若选择跳两格,则此时到达位置 3。第二次若选择跳两格,则此时到达位置 5,若此时再跳两格或四格均已越出所给格子,故不合法。
第二种方案为,第一次选择跳四格,则此时到达位置 5。若此时再跳两格或四格均已越出所给格子,故不合法。
故均不能够使其恰好到达终点。
示例3
输入
1
输出
1
备注:
例:给出 5个格子,初始位置为 1,第一次若选择跳两格,则此时到达位置 3。第二次若选择跳两格,则此时到达位置 5。
AC Code
#include "bits/stdc++.h"
using namespace std;
int main()
{
long long int n;
cin >> n;
if(n & 1) cout << n;
else cout << -1 << endl;
return 0;
}
H 小名的回答
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
总算到暑假了,小姐姐是非常的闲,所以想去找梅溪湖的小名玩,可是她从没去过梅溪湖,所以只能凭小名告诉她的地方走,每次只能向上下左右四个方向走1步。小姐姐的坐标为(0,0),小名在(a,b),小姐姐有点近视,小名也有点近视。所以到了(a,b)也不一定能和小名会面,不过还好,小姐姐最后找到了小名。小姐姐想要小名知道自己来一趟是多么不容易,所以在聊天的过程中小姐姐说自己为了到这里走了n步。小名,你觉得她说的可能是真话么。有可能就输出YES,否则输出NO(如果用random的话,小姐姐觉得你好像不在意她,明年暑假就不来了)
输入描述:
a,b,n(-1000<=a,b<=1000,a*b>0,1<=n<=2000)
输出描述:
“YES” or “NO”
示例1
输入
2 2 4
输出
YES
示例2
输入
1 9 2
输出
NO
AC Code
#include "bits/stdc++.h"
using namespace std;
int main()
{
long long int a, b, n;
cin >> a >> b >> n;
if (a + b <= n && (n - a - b) % 2 == 0) cout << "YES" << endl;
else cout << "NO" << endl;
return 0;
}
I 牛妹数
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
如果一个数是一个偶数而且大于50,我们称它为牛妹数
给你一个数,判断它是否是牛妹数
输入描述:
输入一个整数n (1 <= n <= 100)
输出描述:
如果是牛妹数,输出"yes", 否则输出"no"
示例1
输入
50
输出
no
示例2
输入
52
输出
yes
AC Code
#include "bits/stdc++.h"
using namespace std;
int main()
{
int n;
cin >> n;
if (n % 2 == 0 && n > 50) cout << "yes" << endl;
else cout << "no" << endl;
return 0;
}
J 判断闰年
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
判断一个整数n是否是闰年
输入描述:
输入一个整数n (1≤n≤2018)
输出描述:
是闰年输出"yes" 否则输出"no"
示例1
输入
2000
输出
yes
示例2
输入
1900
输出
no
AC Code
#include "bits/stdc++.h"
using namespace std;
int main()
{
long long int n;
cin >> n;
if (n % 400 == 0 || n % 4 == 0 && n % 100 != 0) cout << "yes" << endl;
else cout << "no" << endl;
return 0;
}
K 统计数据正负个数
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
输入10个整数,分别统计输出正数、负数的个数。
输入描述:
输入10个整数(范围-231~231-1),用空格分隔。
输出描述:
两行,第一行正数个数,第二行负数个数,具体格式见样例。
示例1
输入
-1 2 3 -6 7 8 -1 6 8 10
输出
positive:7
negative:3
AC Code
#include "bits/stdc++.h"
using namespace std;
int main()
{
int n;
int cnt1 = 0, cnt2 = 0;
while(cin >> n) {
if (n > 0) cnt1 ++;
if (n < 0) cnt2 ++;
}
cout << "positive:" << cnt1 << endl;
cout << "negative:" << cnt2 << endl;
return 0;
}
L 小乐乐是否被叫家长
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
小乐乐的班级进行了一次期中考试,考试一共有3门科目:数学,语文,英语,小乐乐的班主任决定给没有通过考核的同学家长开一次家长会,考核的标准是三科平均分不低于60分,所以现在想请你帮忙算一算小乐乐会不会被叫家长。
输入描述:
一行,输入三个整数(表示小乐乐的数学、语文、英语的成绩),用空格分隔。
输出描述:
一行,如果小乐乐会被请家长则输出“YES”,否则输出“NO”。
示例1
输入
80 60 50
输出
NO
示例2
输入
70 55 40
输出
YES
AC Code
#include "bits/stdc++.h"
using namespace std;
int main()
{
int a, b, c;
cin >> a >> b >> c;
if ((a + b + c) / 3 >= 60) cout << "NO" << endl;
else cout << "YES" << endl;
return 0;
}
M 最大最小值
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
输入三个数,输出最大数,最小数
输入描述:
输入一行,包含三个整数a, b , c (1 \le a,b,c \le 10000001≤a,b,c≤1000000)
输出描述:
输出两行,第一行输出最大数,第二行输出最小数。具体格式见样例输出。
示例1
输入
1 2 3
输出
The maximum number is : 3
The minimum number is : 1
AC Code
#include "bits/stdc++.h"
using namespace std;
int main()
{
int a, b, c;
cin >> a >> b >> c;
cout << "The maximum number is : " << max({a, b, c}) << endl;
cout << "The minimum number is : " << min({a, b, c}) << endl;
return 0;
}
N 送分题
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
数据结构之神ccz又在出毒瘤数据结构了
神出了这样一个题:
给你三个数,在这三个数中间任意加或者是+,然后可以随便打括号,只要这个表达式合法
比如说1 2 3可以得到:
1+23=7
1*(2+3)=5
123=6
(1+2)*3=9
不能改变这三个数的原顺序
最大化表达式的值
输入描述:
输入三行,每行一个数
分别表示a,b,c
输出描述:
输出一行一个数表示答案
示例1
输入
1
2
3
输出
9
示例2
输入
2
10
3
输出
60
备注:
1 <= a , b , c <= 10
AC Code
#include "bits/stdc++.h"
using namespace std;
int main()
{
long long int a, b, c;
cin >> a >> b >> c;
long long int maxx;
maxx = a + b * c;
maxx = max(maxx, a * (b + c));
maxx = max(maxx, a * b * c);
maxx = max(maxx, (a + b) * c);
maxx = max(maxx, a + b + c);
cout << maxx << endl;
return 0;
}
O 四季
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
气象意义上,通常以3~5月为春季(spring),6~8月为夏季(summer),9~11月为秋季(autumn),12月~来年2月为冬季(winter)。请根据输入的年份以及月份,输出对应的季节。
输入描述:
输入的数据格式是固定的YYYYMM的形式,即:年份占4个数位,月份占2个数位。
输出描述:
输出月份对应的季节(用英文单词表示,全部用小写字母)。
示例1
输入
201901
输出
winter
备注:
输入的年份应该是4位数,输入的月份应该为1~12。
AC Code
#include "bits/stdc++.h"
using namespace std;
int main()
{
int a, b;
cin >> a;
b = a % 100;
if (b >= 3 && b <= 5) cout << "spring" << endl;
else if (b >= 6 && b <= 8) cout << "summer" << endl;
else if (b >= 9 && b <= 11) cout << "autumn" << endl;
else cout << "winter" << endl;
return 0;
}
P B是不是太迟了
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
众所周知,gplt选拔赛是在10月29号进行。那么大家在10月29号之前都可以训练自己的编程(为什么29号不能训练了呢,因为29号要睡懒觉_)。
想在,小金翻开了日历,他想知道今天还能不能训练,是不是太迟了。
输入描述:
输入一个字符串S(格式为yyyy/mm/dd),保证在2020年并且日期合法。
输出描述:
没有太迟,还有时间训练,则输出:
No. It's not too late.
如果太迟了,输出:
QAQ
示例1
输入
2020/10/15
输出
No. It's not too late.
示例2
输入
2020/11/30
AC Code
#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
int main()
{
ll y, m, d;
scanf("%lld/%lld/%lld", &y, &m, &d);
if (y == 2020) {
if (m < 10 || m == 10 && d < 29) {
cout << "No. It's not too late." << endl;
}
else cout << "QAQ" << endl;
}
else cout << "QAQ" << endl;
return 0;
}
Q 前天是哪天
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
给定公元2000年到公元3000年之间的某一天,请你给出该天的前天是哪一天.
输入描述:
输入在一个日期,格式如"yyyy-mm-dd",题目保证所有输入日期为合法日期。
输出描述:
在一行中输出日期,格式如"yyyy-mm-dd"。
示例1
输入
2020-11-15
输出
2020-11-13
备注:
注意日期格式,月份或者天数不足2位要补零。
AC Code
#include "stdio.h"
int main()
{
int y, m, d;
int a[23] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
scanf("%d-%d-%d", &y, &m, &d);
if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) a[2] = 29;
if (d > 2) d -= 2;
else {
if (-- m == 0) {
m = 12;
y --;
}
d = a[m] - 2 + d;
}
printf("%d-%02d-%02d", y, m, d);
return 0;
}
R L1-2单位换算
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
已知1英尺=12英寸,1英寸=2.54厘米,1厘米=10毫米。
现在给你一个英尺数,请你换算成毫米。
输入描述:
第一行给定一个正整数 N ( 0 ≤ N ≤ 100 ),单位是英尺。
输出描述:
在一行中输出一个数,代表换算后的结果,单位为毫米。
若结果不为整数,只保留一位小数,末尾不要有多余的零。
示例1
输入
5
输出
1524
AC Code
#include "bits/stdc++.h"
using namespace std;
int main()
{
int n;
cin >> n;
if (n % 5)
cout << fixed << setprecision(1) << n * 12 * 2.54 * 10 << endl;
else
cout << n * 12 * 2.54 * 10 << endl;
return 0;
}
S 纸牌
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
小w想和你van纸牌
小w有两张纸牌,两张纸牌上都有相同的正整数n
每一轮一张纸牌上的数都可以减去小于等于另外一张纸牌上的数的数
每一轮只能操作和上轮不同的纸牌
小w想知道三轮之后两纸牌上数字之和的最小值
注意,不能减为负数
输入描述:
第一行1个正整数n。
输出描述:
一行一个整数
表示三轮之后两纸牌上数字和的最小值
示例1
输入
2
输出
1
说明
样例解释:两张ab上数字分别为2,第一轮,a张减去1(1 <= (b = 2)) 第二轮b减去1(1 <= (a = 1)) ,第三轮a减去1(1 <= (b = 1)),游戏结束a+b = 1,该结果为最可行优解之一
备注:
保证1 ≤ n ≤ 1000000000
AC Code
#include "bits/stdc++.h"
using namespace std;
int main()
{
int n;
cin >> n;
if (n == 1) cout << 0;
else if (n == 2) cout << 1;
else cout << n - n / 2;
return 0;
}
T 排队领水
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
羊村的供水系统搞砸了,隔壁牛村捐赠的的矿泉水刚刚送达,村长让喜羊羊们排队领水,已知有n个羊村村民正在排队取水,懒羊羊不知道他在队伍的具体哪个位置,但他知道有不少于a个人在他前面,有不多于b个人在他后面,你能帮忙计算一下懒羊羊有多少个可能的位置吗?
输入描述:
输入一行包含三个整数n,a,b
0<= a,b < n <= 100
输出描述:
输出一行包含一个整数表示可能的位置数
示例1
输入
3 1 1
输出
2
示例2
输入
10 1 3
输出
4
AC Code
#include "bits/stdc++.h"
using namespace std;
int main()
{
int n, a, b;
cin >> n >> a >> b;
if (n - a > b) {
cout << b + 1 << endl;
}
else {
cout << n - a << endl;
}
return 0;
}
U 可编程拖拉机比赛
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 65536K,其他语言131072K
64bit IO Format: %lld
题目描述
“这个比赛,归根结底就是控制一个虚拟的小拖拉机跑完整个赛道。一般一场比赛会有 9 个到 13 个赛道,最后看能跑完多少个赛道。”
通常在一场可编程拖拉机比赛中,分别会有实际参赛队伍数 10%、20%、30% 向下取整的队伍获得金、银、铜牌,其余队伍获得荣誉提名,俗称“铁牌”。
但是主办方往往会多准备一些奖牌,那么在发奖牌的时候会按照比例向上取整发出的奖牌以减少浪费,就会有一些原本获得银牌的队伍获得了金牌。
现在给出一个赛区的规模,也就是这个赛区的实际参赛队伍数,小 Q 同学想知道有多少队伍的奖牌会由银变金、由铜变银、由铁变铜。
输入描述:
输入只有一行,包含一个整数 n (10 <= n <= 1000),表示实际参赛队伍数。
输出描述:
输出一行,包含三个由空格分隔的整数,分别表示奖牌会由银变金、由铜变银、由铁变铜的队伍数。
示例1
输入
115
输出
1 1 2
说明
按照下取整规则只发 11 块金牌的话,第 12 名原本是银牌,但是按照上取整规则发 12 块金牌,第 12 名是金牌,就由银变金了。
AC Code
#include "iostream"
#include "cmath"
using namespace std;
int main()
{
double a, b, c, n;
cin >> n;
int j, k, l;
a = n * 0.1;
b = n * 0.2;
c = n * 0.3;
j = ceil(a) - floor(a);
k = ceil(b) - floor(b);
l = ceil(c) - floor(c);
cout << j << " " << j + k << " " << j + k + l;
return 0;
}
//ceil函数:
头文件:#include<cmath>或者写成#include<math.h>
含义:对小数向上“”取整”,这里不一定得到的就是整数,因为他的返回值是个double型的,有可能就是个小数,但是后边的小数部分全部是0;
//floor函数:
和ceil 函数正好相反;
头文件:#include<cmath>或者写成#include<math.h>
含义:对小数向下“”取整”,这里不一定得到的就是整数,因为他的返回值是个double型的,有可能就是个小数,但是后边的小数部分全部是0;
V [NOIP2004]不高兴的津津
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。
输入描述:
包括七行数据,分别表示周一到周日的日程安排。每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。
输出描述:
包括一行,这一行只包含一个数字。如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1, 2, 3, 4, 5, 6, 7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。
示例1
输入
5 3
6 2
7 2
5 3
5 4
0 4
0 6
输出
3
AC Code
#include "iostream"
#include "cmath"
using namespace std;
int main()
{
int s, extr;
int sum[7];
for (int i = 0; i < 7; i ++) {
cin >> s >> extr;
sum[i] = s + extr;
}
int maxx = sum[0];
int cnt = 0;
for (int i = 1; i <= 6; i ++) {
if (sum[i] > maxx) {
maxx = sum[i];
cnt = i + 1;
}
}
if (maxx > 8) {
cout << cnt;
}
return 0;
}
W [NOIP2008]ISBN号码
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 51200K,其他语言102400K
64bit IO Format: %lld
题目描述
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。
识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。
你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。
输入描述:
只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。
输出描述:
共一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。
示例1
输入
0-670-82162-4
输出
Right
示例2
输入
0-670-82162-0
输出
0-670-82162-4
AC Code
#include "bits/stdc++.h"
using namespace std;
int main()
{
char s[14], c;
cin >> s;
int h = 0, k = 0;
for (int i = 0; i < 11; i ++) {
if (s[i] != '-') {
k ++;
h += k * (s[i] - '0');
}
}
h %= 11;
if (h == 10) c = 'X';
else c = h + '0';
if (c == s[12]) cout << "Right" << endl;
else {
s[12] = c;
cout << s;
}
return 0;
}