user-0 提问: 手机棋盘加密算法（急！！！）

回复:
user: user-1
content: 引用 7 楼 zhao4zhong1 的回复:[quote=引用 5 楼 qq423399099 的回复:] 哈哈，只有放在C++小版里才会404  http://bbs.csdn.net/topics/391853986 规则越多越严格的论坛，死得越早越快。个人意见。[/quote] 对的，我在VB版就见到一个圣母，为社区一点力都没出，还要求删除他不满意的贴子，贴子都删了，谁还来你csdn。

user: user-2
content: 这叫对数组不熟么，分明是不会编程，检测输入，定位数组元素，，，

user: user-3
content: 等待这个帖子404中……

user: user-4
content: 引用 8 楼 zhao4zhong1 的回复:“仅供参考”四个字已经被赵4老师锤炼成一句比“芝麻开门”还灵验的咒语了！

user: user-3
content: “仅供参考”四个字已经被赵4老师锤炼成一句比“芝麻开门”还灵验的咒语了！

user: user-3
content: 引用 5 楼 qq423399099 的回复:哈哈，只有放在C++小版里才会404  http://bbs.csdn.net/topics/391853986 规则越多越严格的论坛，死得越早越快。个人意见。

user: user-3
content: //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

user: user-5
content: 哈哈，只有放在C++小版里才会404

user: user-3
content: 咦？竟然还没404

user: user-4
content: 仅供参考. #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; } 效果: