《算法竞赛入门经典》-读书笔记-排列&分数化小数

《算法竞赛入门经典》-读书笔记-排列&分数化小数

用1,2,3,···,9 组成 3 个三位数 abc,defghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。输出所有解。

题目特别写出了提示:不必太动脑筋。(其实这句话让我现在都不清楚我的解法是不是符合要求......)

1  #include < stdio.h >
2  #include < stdlib.h >
3  int main()
4  {
5      int num;
6      char chr;
7      char a[ 10 ];
8      char temp[ 3 ];
9      char pos;
10      // num*3<=987 所以 num<=329
11      for (num = 123 ;num <= 329 ;num ++ )
12      {
13          itoa(num,temp, 10 );
14          strcpy(a,temp);
15          itoa(num * 2 ,temp, 10 );
16          strcat(a,temp);
17          itoa(num * 3 ,temp, 10 );
18          strcat(a,temp); // a保存了num以及num*2和num*3组成的字符串
19 
20          for (chr = ' 1 ' ;chr <= ' 9 '   && (pos = strchr(a,chr)) != NULL;chr ++ )
21              ;
22          if (pos != NULL)
23              printf( " %d:%d:%d=1:2:3\n " ,num,num * 2 ,num * 3 );       
24      }
25      return   0 ;
26  }
27 

 今天继续读到了分数化小数题目,感觉挺简单的一个问题。实际藏着一个我并不知道的printf妙用。

  输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b<=10^6,c<=100.例如a=1,b=6,c=4时应输出0.1667.

printf的特殊用法,对于m.n的格式可以用如下方法表示

    char ch[20];
    printf("%*.*s\n",m,n,ch);
    前边的*定义的是总的宽度,后边的定义的是输出的个数。分别对应外面的参数m和n 。 这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。
1  #include < stdio.h >
2  int main()
3  {
4      int a,b,c;
5      scanf( " %d %d %d " , & a, & b, & c);
6      printf( " %.*lf " ,c,( double )a / b);
7      return   0 ;
8  }

你可能感兴趣的:(《算法竞赛入门经典》-读书笔记-排列&分数化小数)