习题2-10 排列(permutition)
题目:用1,2,3……9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi = 1:2:3。输出所有解。提示:不必太动脑筋。
分析:上学期院里组织比赛的一道题,利用数组,a[1]~a[9]赋值为0,令a[出现的数字] = 1,若a[1] + a[2] + …… +a[9] == 9,则全部数字都出现。
源码:
- // 习题2-10 样例(permutation)
- #include <stdio.h>
- int main(void)
- {
- int x, y, z, a[10] = {0};
- for(x = 100; x < 333; x++)
- {
- y = 2*x;
- z = 3*x;
- //令a[出现的数字] = 1
- a[x/100] = a[x/10%10] = a[x%10] = 1;
- a[y/100] = a[y/10%10] = a[y%10] = 1;
- a[z/100] = a[z/10%10] = a[z%10] = 1;
- int i, s = 0;
- for(i = 1; i < 10; i++)
- s += a[i];
- if(s == 9)
- printf("%d\t%d\t%d\n", x, y, z);
- for(i = 1; i < 10; i++) //重新赋值为0
- a[i] = 0;
- }
- return 0;
- }
-
习题2-9 分数化小数(decimal)
题目:输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b <= 10^6,c <= 100。例如a=1,b=6,c=4时应输出0.1667.
分析:考察格式化输出,printf("%*.*lf", x, y, z); 中两个*可用后边的变量表示。
源码:
- // 习题2-9 分数化小数(decimal)
- #include <stdio.h>
- int main(void)
- {
- int a, b, c;
- double x;
- scanf("%d%d%d", &a, &b, &c);
- x = 1.0*a/b;
- printf("%.*lf\n", c, x); //printf("%*.*lf", x, y, z) 第一个*对应x,第二个*对应y,lf对应z
- return 0;
- }
- // 习题2-9 分数化小数(decimal)
-
- #include <stdio.h>
- int main()
- {
- int a, b, c, tmp;
- scanf("%d%d%d", &a, &b, &c);
- printf("%d.", a / b);
- a = a % b * 10;
- while(c-- > 1) {
- printf("%d", a / b);
- a = a % b * 10;
- }
- tmp = a % b * 10 / b;
- if(tmp < 5)
- printf("%d\n", a / b);
- else
- printf("%d\n", a / b + 1);
- return 0;
- }
-
-