69,368
社区成员
发帖
与我相关
我的任务
分享
//http://bbs.csdn.net/topics/391962021
// 1 2 3 4
//1
//2 A B C
//3 D E F
//4 G H I
//5 J K L
//6 M N O
//7 P Q R S
//8 T U V
//9 W X Y Z
//如上
//要求是
//1,:解密:当输入42 21 71 71 93时,会输出HAPPY
//2,:加密:当输入HAPPY时,会输出42 21 71 71 93
//附加要求:如果可以,每行之间做互换,如果输入1321,就表示第1行和第3行互换,然后第2行再和第1行互换,当然也可以输入987867这样,进行3轮互换。
#include <stdio.h>
#include <string.h>
int main() {
char mi[10][5]={
{0, 0 , 0 , 0 , 0 },
{0,' ',' ',' ',' '},
{0,'A','B','C',' '},
{0,'D','E','F',' '},
{0,'G','H','I',' '},
{0,'J','K','L',' '},
{0,'M','N','O',' '},
{0,'P','Q','R','S'},
{0,'T','U','V',' '},
{0,'W','X','Y','Z'},
};
char ln[80];
char s[80];
char *p,c;
int i;
int L;
int n;
int y;
int x;
fgets(ln,80,stdin);
if ('\n'==ln[0]) return 1;//直接输入回车,退出
L=strlen(ln);
if ('\n'==ln[L-1]) ln[L-1]=0;//去掉行尾的'\n'(如果有)
p=ln;
while (1) {
if (1!=sscanf(p,"%79s%n",s,&n)) break;
if (2==strlen(s) && '1'<=s[0] && s[0]<='9' && '1'<=s[1] && s[1]<='4') {
printf("%c",mi[s[0]-'0'][s[1]-'0']);
} else {
L=strlen(s);
for (i=0;i<L;i++) if (!('A'<=s[i] && s[i]<='Z')) break;
if (i>=L) {//全部由'A'到'Z'组成
for (i=0;i<L;i++) {
for (y=1;y<=9;y++) {
for (x=1;x<=4;x++) {
if (mi[y][x]==s[i]) {
if (i==L-1) {
printf("%d%d",y,x);
} else {
printf("%d%d ",y,x);
}
goto NC;
}
}
}
NC:;
}
} else {
L=strlen(s);
if (L>=4 && 0==L%2) {
for (i=0;i<L;i+=2) {
if (!('1'<=s[i] && s[i]<='9' && '1'<=s[i+1] && s[i+1]<='9')) break;
}
if (i>=L) {//符合行互换语法
for (i=0;i<L;i+=2) {
if (s[i]!=s[i+1]) {
for (x=1;x<=4;x++) {c=mi[s[i]-'0'][x];mi[s[i]-'0'][x]=mi[s[i+1]-'0'][x];mi[s[i+1]-'0'][x]=c;}
// printf("\n%c<=>%c\n",s[i],s[i+1]);
// for (y=1;y<=9;y++) {
// printf("%d ",y);
// for (x=1;x<=4;x++) {
// printf("%c",mi[y][x]);
// }
// printf("\n");
// }
}
}
}
}
}
}
p+=n;
}
return 0;
}
//输入:42 21 71 71 93 HAPPY 1321 987867 HAPPY
//输出:HAPPY42 21 71 71 9342 11 81 81 63
#include <stdio.h>
void mima(void)
{
char mi[10][5]={
{0},
{0},
{0,'A','B','C',0},
{0,'D','E','F',0},
{0,'G','H','I',0},
{0,'J','K','L',0},
{0,'M','N','O',0},
{0,'P','Q','R','S'},
{0,'T','U','V',0},
{0,'W','X','Y','Z'}
};
char s;
int f=0,i,j,z,st=1;
while(st!=0)
{
printf("功能 1 : 加密 2 : 解密\n");
scanf("%d",&f);
switch(f){
case 1:
printf("加密\n");
rewind(stdin);
while((s=getchar())!='\n')
{
for(i=1;i<10;i++)
{
for(j=1;j<5;j++)
{
if(s==mi[i][j])
printf("%.1d%.1d\t",i,j);
}
}
}
break;
case 2:
printf("解密\n");
while(scanf("%d",&z))
{
printf("%c",mi[z/10][z%10]);
if('\n'==getchar())
break;
}
break;
default:
break;
}
rewind(stdin);
printf("\n0:退出1:继续\t");
scanf("%d",&st);
}
}
int main(void)
{
mima();
return 0;
}