初学者专用题解 2.0
2026-02-15 17:09:04
发布于:安徽
9阅读
0回复
0点赞
第一个”初学者专用题解 2.0“上线啦!



还请大佬们以后多多关照。
题目大意
狗星的id号是由一组17位的数字所组成,其中每个数字都带有一个权值,对照表如下:
N 0 1 2 3 4 5 6 7 8 9
V 7 0 1 3 2 9 4 6 8 5
(表中的N代表数字,V代表其所对应的权值)
狗星的id号的合法条件如下:
-
该id号的数字权值总和跟17进行取余,最后结果大于5。
-
该id号中不能有除数字以外的字符。
现在请你判断一下,在NN个id号中,判断不合法的id号并输出。如果全部id号都合法,则输出all ok。
输入格式
第一行输入一个整数N,代表共有N个id号。
随后N行,每行输入一个字符串(题目保证没有空格),代表id号。
输出格式
输出所有不合法的id号,每个id号占一行。如果都合法,则输出all ok。
思路
把每个id码的总权值算出来,再判断。
注:要审题,条件别漏了!权值也别加错了。
样例代码
#include<bits/stdc++.h>//万能头文件,省事。
using namespace std;
int main(){
int a;
cin>>a;
string s[a];//字符串组,不能换行输入。
int r[a];//用于计算每条id卡的总权值。
int g[a];//用于查看是不是全是数字字符。
for(int i=0;i<a;i++){
r[i]=0;//别忘了初始化。
cin>>s[i];
g[i]=1;//假设全是数字字符。
for(int j=0;j<s[i].size();j++){
if(s[i][j]=='0') r[i]+=7;
else if(s[i][j]=='1') r[i]+=0;
else if(s[i][j]=='2') r[i]+=1;
else if(s[i][j]=='3') r[i]+=3;
else if(s[i][j]=='4') r[i]+=2;
else if(s[i][j]=='5') r[i]+=9;
else if(s[i][j]=='6') r[i]+=4;
else if(s[i][j]=='7') r[i]+=6;
else if(s[i][j]=='8') r[i]+=8;
else if(s[i][j]=='9') r[i]+=5;
else{
g[i]=0;
break;//跳出循环。
}
}
}
int u=1;//看是不是全合法。
for(int i=0;i<a;i++){
if(r[i]%17<=5||g[i]==0||s[i].size()!=17){//“字符串名.size()”看字符串的位数。
u=0;
cout<<s[i]<<endl;
}
}
if(u==1) cout<<"all ok";
return 0;
}
这里空空如也






有帮助,赞一个