摸拟真题【P1055】思路+代码
查看原帖
摸拟真题【P1055】思路+代码
1163960
Poetry_and_Distance楼主2024/8/26 14:29

摸拟真题【P1055】思路+代码

hello,大家好初来贴子的我是一位正刷题的小活几,请大家多多关照。今天讲一道模拟题。

My Idea

模拟的诀窍就是他们说什么做什么。它的输入就是字符串,这就是类型。然后题目说要对里面的数逐位运算,可以使用循环,这里字符串的形式是x-xxx-xxxxx-x,最后一位是识别码,不包含运算,所以前几位我们循环时遇到"-"得进行continue(到下层循环),其余位则运用计数器进行运算处理,每循环一次就++,然后用一个数储存结果。循环外面我们可以写一个装了所有识别码的数与下标取模11的原数组比较就行了。

My Code

PS:代码请不要搬运,当搬运工很累滴!可以对照思路与注释理解O

#include <bits/stdc++.h>

using namespace std;

char a[14], mod[12] = "0123456789X";
//原数组与取模数组
int cnt = 1, sum = 0;
计数器与储存结果的数
int main()
{
   ios::sync_with_stdio(false),cin.tie(0);
   //可以让cin,cout与scanf,printf一样快
   for (int i = 1; i <= 13; ++i)
   	cin >> a[i];
   //输入原数组
   for (int i = 1; i < 13; ++i)
   {
   	if (a[i] == '-')
   		continue;
        //遇到"-"就到下一次循环
   	else
   	{
   		sum += (a[i] - '0') * cnt;
   		++cnt;
   	}
        //储存结果并准备下一次计算
   }
   if (a[13] == mod[sum % 11])
   	cout << "Right\n";
   //识别码无误,就输出"Right"
   else
   {
   	a[13] = mod[sum % 11];
   	for (int i = 1; i <= 13; ++i)
   		cout << a[i];
   }
   //否则输出正确号码
   return 0;
} 
2024/8/26 14:29
加载中...