Zeray Rice

..

「水題選題」1995年普及組

1.设有下列的算式:

      8 0 9
 -------------

□□) □□□□

   □□   
 -------------
     □□□
     □□□
 -------------
          1

求出□中的数字,并打印出完整的算式来。

水題 直接用筆推出結果 printf騙分輸出

<2> 方阵填数:在一个N N的方阵中,填入1,2,……N N个数,并要求构成如下的格式: 例: N=5 13 14 15 16 1 12 23 24 17 2 11 22 25 18 3 10 21 20 19 4 9 8 7 6 5


N=6 16 17 18 19 20 1 15 30 31 32 21 2 14 29 36 33 22 3 13 28 35 34 23 4 12 27 26 25 24 5 11 10 9 8 7 6

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdio.h> 
#include <stdlib.h> 

int main()
{
  int i,j;
  FILE *fin=fopen("input.txt","r");
  int n;
  int t=0,o;
  int number=1;
  fscanf(fin,"%d",&n);
  fclose(fin);
  if(n%2==1)
      t=n/2+1;
  else
      t=n/2;
  int square[n][n];
  for(i=0;i<n;i++)
      for(j=0;j<n;j++)
          square[i][j]=0;
  for(o=0;o<t;o++)
  {
      for(i=o;i<n-o;i++)
          square[i][n-1-o]=number++;
      for(j=n-2-o;j>=o;j--)
          square[n-1-o][j]=number++;
      for(i=n-2-o;i>=o;i--)
          square[i][o]=number++;
      for(j=1+o;j<n-1-o;j++)
          square[o][j]=number++;
  }
  for(i=0;i<n;i++)
  {
      for(j=0;j<n;j++)
          printf("%d ",square[i][j]);
      printf("\n");
  }
  return 0;
}


<3> 若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数。

例如:(13)10=(1101)2
    其中1的个数为3,0的个数为1,则称此数为A类数;
     (10)10=(1010)2
    其中1的个数为2,0的个数也为2,称此数为B类数;
     (24)10=(11000)2
    其中1的个数为2,0的个数为3,则称此数为B类数;

程序要求:求出1~1000之中(包括1与1000),全部A、B两类数的个数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int switcha_b(char *c)
{
  int i;
  int o=0,z=0;
  for(i=0;i<strlen(c);i++)
  {
      if(c[i]=='0')
          z++;
      if(c[i]=='1')
          o++;
  }
  if(o>z)
      return 1;
  else
      return 0;
}

int main()
{
  int i;
  char *c;
  int a=0,b=0;
  for(i=1;i<1000;i++)
  {
      itoa(i,c,2);
      if(switcha_b(c))
          a++;
      else
          b++;
  }
  printf("%d %d",a,b);
  return 0;
}

TIPS: itoa函數用于將10進制數轉換爲N進制數 函數原型爲

char * __cdecl itoa(_In_ int _Val, _Pre_notnull_ _Post_z_ char * _DstBuf, _In_ int _Radix);

e.g. itoa(i,c,2);就是說把 i數轉化爲2進制存進 c指針中。

Comments