本题要求实现一种数字加密方法。首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余——这里用J代表10、Q代表11、K代表12;对偶数位,用B的数字减去A的数字,若结果为负数,则再加10。这里令个位为第1位。
输入格式:
输入在一行中依次给出A和B,均为不超过100位的正整数,其间以空格分隔。
输出格式:
在一行中输出加密后的结果。
输入样例:
1 |
1234567 368782971 |
输出样例:
1 |
3695Q8118 |
题目有坑,暂时还没跳出来(⊙﹏⊙)
已解决,待有空时更新……
虚拟主机竟然被D了14个多小时……
顺便补充了一个不用反转字符串的版本。
我考虑了输入和输出可能存在的坑,但是没有想到,当B的长度小于A的长度时,需要在B前补零以完成加密,那么这道题就存在误导性了。
原题中提到
首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:
没错,是针对B的每位数字,B本身前面没有零。
差评!(我不会说这道题我提交了30+次,无果后Google一下才发现会是这么个情况/(ㄒoㄒ)/~~
另外,当A的长度小于B的长度,剩余部分可以不做处理或者对A前补零(两者并没有什么区别)。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
#include<stdio.h> #include<string.h> void reserve(char *s) { int i,n; char temp; n=strlen(s); for(i=0;i<n/2;i++) { temp=s[i]; s[i]=s[n-i-1]; s[n-i-1]=temp; } return ; } int main() { int i,j,num_a,num_b,length_a,length_b; char buf_a[101],buf_b[101],*a=buf_a,*b=buf_b,pattern[14]="0123456789JQK"; scanf("%s%s",a,b); length_a=strlen(a); length_b=strlen(b); reserve(a); reserve(b); for(i=0;a[i];i++) { num_a=(int)(a[i]-'0'); num_b=(int)(b[i]-'0'); if(i>=length_b) { num_b=0; } if(i%2) { num_b-=num_a; if(num_b<0) { num_b+=10; } } else { num_b+=num_a; num_b%=13; } b[i]=pattern[num_b]; } if(length_a>length_b) { b[i]=0; } reserve(b); printf("%s\n",b); } |
不用反转字符串的版本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
#include<stdio.h> #include<string.h> int main() { char a[101],buf_b[203],*b=buf_b+100,pattern[14]="0123456789JQK"; int i,length,a_length,b_length,a_num,b_num; scanf("%s%s",a,b); a_length=strlen(a); b_length=strlen(b); for(i=1;i<=a_length;i++) { a_num=a[a_length-i]-'0'; b_num=b[b_length-i]-'0'; if(b_length<i) { b_num=0; } if(i%2) { b_num+=a_num; b_num%=13; } else { b_num-=a_num; if(b_num<0) { b_num+=10; } } b[b_length-i]=pattern[b_num]; } if(b_length<a_length) { printf("%s\n",b+b_length-i+1); } else { printf("%s\n",b); } } |
这道题太坑了…
还好看了你的分析
要不一辈子都AC不了…
thx!!!
这道题确实坑,题目都没有描述清楚……
学习了,被坑了快一天
这道题的主要问题就是在于坑的没有道理,有种题目和测试点自相矛盾的感觉,我当时也是被坑了好久……
坑坑坑!!!
确实比较坑,或许 cyll 和我们的思维不太一样吧……