|
板凳
楼主 |
发表于 2017-10-18 10:13:01
|
只看该作者
第二题 ISBN 2008普及组第一题 洛谷P1055
给出一个字符串,取出其中某些位,进行运算,比上一个复杂一点,不是连续位置上的字符。
考点:字符和数字的对应关系,基本方法:硬的计算每一位对应的数字,然后处理余数
- #include <iostream>
- using namespace std;
- string s,t;
- int i,j;
- char ch;
- int main()
- {
- cin>>s;
- j=0;
- j=j+(s[0]-'0')*1;
- j=j+(s[2]-'0')*2;
- j=j+(s[3]-'0')*3;
- j=j+(s[4]-'0')*4;
- j=j+(s[6]-'0')*5;
- j=j+(s[7]-'0')*6;
- j=j+(s[8]-'0')*7;
- j=j+(s[9]-'0')*8;
- j=j+(s[10]-'0')*9;
- j=j%11;
- if (j<=9) ch=j+'0';else ch='X';
- if (s[12]==ch) cout<<"Right";else
- {cout<<s.substr(0,12);cout<<ch;}
- }
复制代码
本体还有就一种技巧性的方法,非连续位置的处理。- #include<iostream>
- using namespace std;
- string s,t;
- int i,sum;
- int h[9]={0,2,3,4,6,7,8,9,10}; ///这个hash表可以将不连续的映射成连续
- int main()
- {
- cin>>s;
- for (i=0;i<=8;i++)
- sum+=(s[h[i]]-'0')*(i+1);
- sum%=11;t=s;
- if (sum==10) t[t.size()-1]='X';else t[t.size()-1]=sum+'0';
- if (t==s) cout<<"Right";else cout<<t;
- return 0;
- }
复制代码
|
|