小明用字母 A对应数字 1,B对应 2,以此类推,用 Z对应 26。对于 27以上的数字,小明用两位或更长位的字符串来对应,例如 AA对应27,AB对应28,AZ对应52,LQ对应329。
请问2019对应的字符串是什么?
#include <stdio.h>
int main() {
int i , j , k ;
for (i=1; i <= 26; i++) {
for (j=1; j <= 26; j++) {
for (k=1; k <= 26; k++) {
int t = i * 26 * 26 + j * 26 + k;
if ( t== 2019) {
printf("%d %d %d", i, j, k);
break;
}
}
}
}
return 0;
}
#include <stdio.h>
int main() {
int i=1, j=1, k=1;
for (i; i <= 26; i++) {
for (j; j <= 26; j++) {
for (k; k <= 26; k++) {
int t = i * 26 * 26 + j * 26 + k;
if (t == 2019) {
printf("%d %d %d", i, j, k);
break;
}
}
}
}
return 0;
}
这两个代码区别在哪里?为什么结果不同?
第二个代码中的 int i=1, j=1, k=1;
和 for
循环里面的问题。
第一个代码在 i
为 2时,for (j=1; j <= 26; j++)
,j
仍是从 1
开始循环;
第二个代码在 i
为 2时,for (j; j <= 26; j++)
,j
是从 26
开始循环。
区别大了,第一个代码,每次进入i的for循环k都是从1开始的,第二个代码k没有地方重置为1,一直累加;j同理。
在for循环中,第一个代码给for循环赋初值,第二个没有赋初值,所以第二个代码,原本是外部循环每变化一次,内部循环就要从1递增到26,但是第二个代码因为for循环不对(j,k)进行初始化,所以j,k经过一次循环后,j=26,k=26。再次进入j、k的循环,由于不初始化循环条件(即应该令=1,k=1),所以不会第二次进行for循环。有点绕口,不知道你能不能看懂