第一次寫這道題是大一上剛學C++的時候,發現始終過不了某個檢測點當時的代碼如下
#include<iostream>
using namespace std;
struct Inf //宣告一個結構陣列
{
char cid[19];
int id[18];
int amn;
int flag = 1;
} num[101];
int main() {
char box[11] = {'1','0','X','9','8','7','6','5','4','3','2'};
int n, flag2 = 1;
cin >> n;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < 18; j++)
{
cin >> num[i].cid[j];
if (num[i].cid[j] == '0')
{
num[i].id[j] = 0;
}
else if (num[i].cid[j] == '1')
{
num[i].id[j] = 1;
}
else if (num[i].cid[j] == '2')
{
num[i].id[j] = 2;
}
else if (num[i].cid[j] == '3')
{
num[i].id[j] = 3;
}
else if (num[i].cid[j] == '4')
{
num[i].id[j] = 4;
}
else if (num[i].cid[j] == '5')
{
num[i].id[j] = 5;
}
else if (num[i].cid[j] == '6')
{
num[i].id[j] = 6;
}
else if (num[i].cid[j] == '7')
{
num[i].id[j] = 7;
}
else if (num[i].cid[j] == '8')
{
num[i].id[j] = 8;
}
else if (num[i].cid[j] == '9')
{
num[i].id[j] = 9;
}
else if (num[i].cid[17] == 'X')
{
num[i].id[j] = 10;
}
}
}
for (int i = 0; i < n; i++)//計算出Z
{
num[i].amn = ((num[i].id[0]) * 7 + (num[i].id[1]) * 9 + (num[i].id[2]) * 10 +
(num[i].id[3]) * 5 + (num[i].id[4]) * 8 + (num[i].id[5]) * 4 +
(num[i].id[6]) * 2 + (num[i].id[7]) * 1 + (num[i].id[8]) * 6 +
(num[i].id[9]) * 3 + (num[i].id[10]) * 7 + (num[i].id[11]) * 9 +
(num[i].id[12]) * 10 + (num[i].id[13]) * 5 + (num[i].id[14]) * 8 +
(num[i].id[15]) * 4 + (num[i].id[16]) * 2) % 11;
}
for (int i = 0; i < n; i++)//檢查是否前17位都是數字
{
for (int j = 0; j < 17; j++)
{
switch (num[i].id[j])
{
case 0:break;
case 1:break;
case 2:break;
case 3:break;
case 4:break;
case 5:break;
case 6:break;
case 7:break;
case 8:break;
case 9:break;
default: {for (int o = 0; o < 18; o++)//將前17位不是數字的ID輸出
{
cout << num[i].cid[o];
}
cout << endl;
num[i].flag = 0;
flag2 = 0;
break; }
}
}
if ((box[num[i].amn]!=num[i].cid[17])&& num[i].flag != 0)
{
for (int j = 0; j < 18; j++)
{
cout << num[i].cid[j];
flag2 = 0;
}
cout << endl;
}
}
if (flag2 == 1)
{
cout << "All passed";
}
return 0;
}
實在是臃腫不堪。。。。
現在大二練題重新寫了一遍之后發現15分了。如今代碼如下
#include<bits/stdc++.h>
using namespace std;
int main() {
int n,flag2=0;
int quan[17] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 };
char code[11] = { '1','0','X','9','8','7','6','5','4','3','2' };
string id;
cin >> n;
getchar();
for (int i = 0; i < n; i++)
{
int flag1 = 0,z=0;//xianhou
getline(cin, id);
for (int j = 0; j < 17; j++)//panduanqian17wei
{
if (id[j]<'0'||id[j]>'9')
{
cout << id << endl;
flag1 = 1;
flag2 = 1;
}
}
if (flag1==0)
{
for (int j = 0; j < 17; j++)
{
z += (id[j] - '0') * quan[j];
}
z=z%11;
if (id[17] != code[z])
{
cout << id << endl;
flag2 = 1;
}
}
}
if (flag2==0)
{
cout << "All passed";
}
return 0;
}
但是由于之前的代碼寫得實在太差,導致自己一直找不出不能15分的原因,故在論壇求助各位。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/197570.html
標籤:新手樂園
