『アルゴリズムコンテスト入門経典』練習問題——Chapter 2

23900 ワード

練習問題2-1桁(digit)
 1 #include 
 2 void main()
 3 {
 4     int n,number=0;
 5     scanf("%d", &n);
 6     while(n!=0)
 7     {
 8         n /= 10;
 9         number++;
10     }
11     printf("%d
",number); 12 }

練習問題2-2水仙花数(daffodil)
#include 
void main()
{
    int i;
    int a,b,c;
    for (i=100;i<1000;i++)
    {
        a = i/100;
        b = i/10%10;
        c = i%10;
        if (a*a*a+b*b*b+c*c*c==i)
        {
            printf("%d ",i);
        }
        
    }
    printf("
"); }

練習問題2-3韓信点兵(hanxin)
 1 #include 
 2 void main()
 3 {
 4     int n,m,q;
 5     bool success = false;
 6     scanf("%d%d%d", &n, &m, &q);
 7 
 8     for (int i=1;i<100;i++)
 9     {
10         if (i%3==n && i%5==m && i%7==q)
11         {
12             printf("%d
",i); 13 success = true; 14 break; 15 } 16 } 17 if (!success) // i == 100 18 { 19 printf("No answer
"); 20 } 21 }

練習問題2-4逆三角形(triangle)
 1 #include 
 2 void main()
 3 {
 4     int i,n,m,j;
 5     scanf("%d", &n);
 6 
 7     for (i=n;i>0;i--)
 8     {
 9         for (m=0;m)
10         {
11             printf(" ");
12         }
13         for (j=2*i-1;j>0;j--)
14         {
15             
16             printf("#");
17         }
18         printf("
"); 19 } 20 }

練習問題2-5統計(stat)
 1 #include 
 2 #include 
 3 void main()
 4 {
 5     int i,n,m,number=0;
 6     int *p;
 7     scanf("%d", &n);
 8     p = (int*)malloc(sizeof(int)*n);
 9     for(i=0;i)
10     {
11         scanf("%d",&p[i]);
12     }
13     scanf("%d", &m);
14     for(i=0;i)
15     {
16         if (p[i]<m)
17         {
18             number++;
19         }
20     }
21     printf("%d",number);
22 }

リダイレクトを使用する場合は、次のように変更します.
 1 #define LOCAL
 2 #include 
 3 #include 
 4 void main()
 5 {
 6 #ifdef LOCAL
 7     freopen("data.in","r",stdin);
 8     freopen("data.out","w",stdout);
 9 #endif
10 //    

練習問題2-6調和関数(harmony)
#include 
void main()
{
    int n,i;
    double sum = 0;
    scanf("%d",&n);
    for (i=1; i <=n;i++)
    {
        sum += 1.0/i;
    }
    printf("%.3lf",sum);
}

練習問題2-7近似計算(approximation)
 1 #include 
 2 #include 
 3 void main()
 4 {
 5     int n,m,q;
 6     double flag = -1;
 7     double sum = 0;
 8     double tmp;
 9     for (int i=1;;i+=2)
10     {
11         flag = -1 * flag;
12         tmp = flag/i;
13     //    printf("%lf
",tmp);
14 sum += tmp; 15 16 if (fabs(tmp)<10e-6) 17 { 18 break; 19 } 20 } 21 printf("pi = %lf
",4*sum); 22 }

練習問題2-8サブシーケンスの和(subsequence)
#include 
#include 
void main()
{
    int i,n,m;
    double sum=0;
    scanf("%d%d",&n,&m);
    for (i=n;i<=m;i++)
    {
        sum+=1.0/i/i; //   n   n*n    
    }
    printf("%.5lf",sum);
}

練習問題2-9分数化小数
 1 #include 
 2 int main(void)
 3 {
 4     int a, b, c;
 5     double x;
 6     scanf("%d%d%d", &a, &b, &c);
 7     x = 1.0*a/b;
 8     printf("%.*lf
", c, x); //printf("%*.*lf", x, y, z) * x, * y,lf z 9 return 0; 10 }

練習問題2-10配列(permutation)
 1 #include 
 2 int main(void)
 3 {
 4     int x, y, z, a[10] = {0};
 5     for(x = 100; x < 333; x++)
 6     {
 7         y = 2*x;
 8         z = 3*x;
 9         // a[     ] = 1
10         a[x/100] = a[x/10%10] = a[x%10] = 1;
11         a[y/100] = a[y/10%10] = a[y%10] = 1;
12         a[z/100] = a[z/10%10] = a[z%10] = 1;
13         int i, s = 0;
14         for(i = 1; i < 10; i++)
15             s += a[i];
16         if(s == 9)
17             printf("%d\t%d\t%d
", x, y, z); 18 for(i = 1; i < 10; i++) // 0 19 a[i] = 0; 20 } 21 return 0; 22 }

 
リファレンスアドレスhttp://blog.csdn.net/litiouslove/article/details/7891700