问题链接:HDU2099 整除的尾数
问题简述:参见上述链接。
问题分析:开始时,采用枚举法来解,当时用C语言写了程序。后面又找到了好办法,用C++语言重写了程序,可以有个比较。
新写的程序放在前面。
这个问题使用枚举法进行求解,并不是一个难题。要点有以下3点:
1.读题,正确处理输入;
2.按照要求输出结果,即输出两位整数且前面补0;
3.控制空格,即最后一个数不能输出后面的空格,只是程序技巧的问题。
采用枚举法,虽然简单易行,本程序也AC了。然而执行时间长,应该有更加巧妙快速的实现方法。
程序说明:(略)。
AC的C++语言程序(非枚举)如下:
/* HDU2099 整除的尾数 */ #include <iostream> using namespace std; const int MOD = 100; int main() { int a, b, min; while(cin >> a >> b) { if(a == 0 && b == 0) break; // 计算最小的答案 min = (b - a * MOD % b) % b; // 循环输出结果 for(int i=min; i<MOD; i+=b) { if(i != min) printf(" "); printf("%02d", i); } printf(" "); } return 0; }
AC的C++语言程序(枚举法)如下:
/* HDU2099 整除的尾数 */ #include <iostream> using namespace std; const int MOD = 100; int main() { int a, b, count; while(cin >> a >> b) { if(a == 0 && b == 0) break; a *= MOD; count = 0; for(int i=0; i<MOD; i++) if((a + i) % b == 0) { if(++count > 1) printf(" "); printf("%02d", i); } printf(" "); } return 0; }
AC的C语言程序如下:
/* HDU2099 整除的尾数 */ #include <stdio.h> int main(void) { int a, b, i; for(;;) { scanf("%d%d", &a, &b); if(a==0 && b==0) break; int count = 0; a *= 100; for(i=0; i<100; i++) if((a+i)%b == 0) { if(++count > 1) printf(" "); printf("%02d", i); } printf(" "); } return 0; }