信息学奥赛一本通 1942:【08NOIP普及组】ISBN号码 | OpenJudge NOI 1.7 29:ISBN号码 | 洛谷 P1055 [NOIP2008 普及组] ISBN 号码
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通 1942:【08NOIP普及组】ISBN号码 | OpenJudge NOI 1.7 29:ISBN号码 | 洛谷 P1055 [NOIP2008 普及组] ISBN 号码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目鏈接】
ybt 1942:【08NOIP普及組】ISBN號碼
OpenJudge NOI 1.7 29:ISBN號碼
洛谷 P1055 [NOIP2008 普及組] ISBN 號碼
【題目考點】
1. 字符串
【解題思路】
整個字符串長度為len,最后識別碼的下標為len-1。i從0遍歷到len-2,只要不是’-’,那么就將該位置的數字乘以一個不斷變大的數字p而后加和。
根據加和求出識別碼。
判斷求出的識別碼和原識別碼是否相同,相同則輸出"Right",不同則替換原識別碼,而后輸出。
【題解代碼】
解法1:使用字符數組
#include<bits/stdc++.h> using namespace std; int main() {char s[20], cr;//cr:經過計算得到的正確的識別碼 cin >> s;int len = strlen(s), p = 1, sum = 0;//p:每次乘的數字,第一次乘1,第二次乘2... for(int i = 0; i < len - 1; ++i)//從下標0遍歷到識別碼前面的位置 {if(s[i] != '-'){sum += p * (s[i] - '0');p++;}}if(sum % 11 == 10)cr = 'X';elsecr = '0' + sum % 11; if(s[len-1] == cr)//如果正確的識別碼和原識別碼相同 cout << "Right";else {s[len-1] = cr;//替換識別碼 cout << s;}return 0; }解法2:使用string類
#include<bits/stdc++.h> using namespace std; int main() {string s; char r, cr;//r:原識別碼 cr:經過計算得到的正確的識別碼 int p = 1, sum = 0;//p:每次乘的數字,第一次乘1,第二次乘2... cin >> s;r = s.back(), s.pop_back();//取出并去掉末尾識別碼 for(int i = 0; i < s.length(); ++i)//遍歷到識別碼前面的位置 if(s[i] != '-')sum += p++ * (s[i] - '0');cr = sum % 11 == 10 ? 'X' : '0' + sum % 11;if(r == cr)//如果正確的識別碼和原識別碼相同 cout << "Right";else {s.push_back(cr);//添加識別碼cout << s;}return 0; }總結
以上是生活随笔為你收集整理的信息学奥赛一本通 1942:【08NOIP普及组】ISBN号码 | OpenJudge NOI 1.7 29:ISBN号码 | 洛谷 P1055 [NOIP2008 普及组] ISBN 号码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米键盘 键盘切换_“年轻人的第一把机械
- 下一篇: matlab snr eb n0,snr