练习题 7
吸血鬼数字"吸血鬼数字"是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的,例如,下列数字都是"吸血鬼数字":
1260 = 21 * 60
1827 = 21 * 87
2187 = 27 * 81
写一个程序,找出4位数的所有吸血鬼数字(摘自Thinking in Java 4th Edition 第4章,练习题10)
我最近因受老师压迫,去学习Java EE了,所以只能抛开我挚爱的C,不过练习题还会继续发下去,今天在书上看到这题(当然代码我已经写出来了),这题对新手应该颇具挑战性,老手也可以复习一下。。。
参考答案:
程序代码:#include <stdio.h>
#include <stdlib.h>
int get(int v, int index) {
switch(index) {
case 0 :
return v / 1000 % 10;
case 1 :
return v / 100 % 10;
case 2 :
return v / 10 % 10;
case 3:
return v % 10;
}
}
int main(void) {
int v, r1, r2, r3, r4, r5, temp, compare[4];
for(v = 1001; v < 10000; v++) {
if(v % 100 == 0)
continue;
for(r1 = 10; r1 < 100; r1++) {
for(r2 = 10; r2 < 100; r2++) {
if(r1 * r2 == v) {
for(r3 = 0; r3 < 4; r3++)
compare[r3] = get(v, r3);
temp = r1 * 100 + r2;
for(r4 = 0; r4 < 4; r4++) {
for(r5 = 0; r5 < r3; r5++) {
if(compare[r5] == get(temp, r4)) {
while(r5 < r3 - 1) {
compare[r5] = compare[r5 + 1];
r5++;
}
r3--;
break;
}
}
}
if(!r3) {
printf("%d = %d * %d\n", v, r1, r2);
}
}
}
}
}
system("pause");
return 0;
}其实这道题的主要目的是为了练习循环,因为这道题是流程控制的练习题。[ 本帖最后由 lz1091914999 于 2011-7-7 16:53 编辑 ]









