zoukankan      html  css  js  c++  java
  • 《算法竞赛入门经典》第三章 3.1

    程序 3-1

     1 #include<stdio.h>
     2 #define MAXN 100 + 10
     3 int a[MAXN];
     4 int main()
     5 {
     6     int i, x, n = 0;
     7     while(scanf("%d", &x) == 1)
     8         a[n++] = x;
     9     for(i = n-1; i>=1; i--)
    10     {
    11         printf("%d ", a[i]);
    12     }
    13     printf("%d
    ", a[0]);
    14     return 0;
    15 }

      上面的输出方法在考研复试,王道机试遇到多次。。

      不过这次打字出错 结果总是运行时错误。

    提示3-2

      如果放在main内部,将100换成100000(5个0)还是可以的,1000000(6个0)则真的异常退出。放在main之上,没有这个问题。

    程序3-2

     1 #include<stdio.h>
     2 #include<string.h>
     3 #define MAXN 1000 + 10
     4 int a[MAXN];
     5 int main()
     6 {
     7     int i, j, n, k, first = 1;
     8     memset(a, 0, sizeof(a));
     9     scanf("%d%d", &n, &k);
    10     for(i = 1; i <=k; i++)
    11         for(j = 1; j <=n; j++)
    12             if(j % i ==0)
    13                 a[j] = !a[j];
    14     for(i = 1; i <=n; i++)
    15         if(a[i])
    16         {
    17             if(first)
    18                 first = 0;
    19             else
    20                 printf(" ");
    21             printf("%d", i);
    22         }
    23     return 0;
    24 }

      这个输出技巧和程序3-1的输出技巧区别在于,3-1的程序要求知道倒数第二个元素的index,而后者3-2则更一般,后者可适用更多情况。

    程序3-3

     1 #include<stdio.h>
     2 #include<string.h>
     3 #define MAXN 10
     4 int a[MAXN][MAXN];
     5 int main()
     6 {
     7     int n, x, y, tot = 0;
     8     scanf("%d", &n);
     9     memset(a, 0, sizeof(a));
    10     tot = a[x=0][y=n-1] = 1;
    11     while(tot < n*n)
    12     {
    13         while(x+1<n && !a[x+1][y]) a[++x][y] = ++tot;
    14         while(y-1>=0 && !a[x][y-1]) a[x][--y] = ++tot;
    15         while(x-1>=0 && !a[x-1][y]) a[--x][y] = ++tot;
    16         while(y+1<n && !a[x][y+1]) a[x][++y] =  ++tot;
    17 
    18     }
    19     for(x = 0; x < n; x++)
    20     {
    21         for(y = 0; y < n; y++)
    22             printf("%3d", a[x][y]);
    23             printf("
    ");
    24     }
    25     return 0;
    26 }
  • 相关阅读:
    Eclipse 开发过程中利用 JavaRebel 提高效率
    数字转化为大写中文
    网页变灰
    解决QQ截图无法在PS中粘贴
    ORACLE操作表时”资源正忙,需指定nowait"的解锁方法
    网页常用代码
    SQL Server 2000 删除注册的服务器
    GridView 显示序号
    读取Excel数据到DataTable
    清除SVN版本控制
  • 原文地址:https://www.cnblogs.com/LzKlyhPorter/p/4191523.html
Copyright © 2011-2022 走看看