首页 > 代码库 > 第三章、枚举!很暴力

第三章、枚举!很暴力

第一节、坑爹的奥数
p59 穷举 3位数+3位数=3位数,1~9九个数,只能用一次。

#include <stdio.h>int main(){  int a,b,c,d,e,f,g,h,i,total=0;  for(a=1; a<=9; a++)  for(b=1; b<=9; b++)      for(c=1; c<=9; c++)  for(d=1; d<=9; d++)  for(e=1; e<=9; e++)      for(f=1; f<=9; f++)  for(g=1; g<=9; g++)  for(h=1; h<=9; h++)  for(i=1; i<=9; i++)  {    if(a!=b && a!=c && a!=d && a!=e && a!=f && a!=g && a!=h && a!=i    && b!=c && b!=d && b!=e && b!=f && b!=g && b!=h && b!=i    && c!=d && c!=e && c!=f && c!=g && c!=h && c!=i    && d!=e && d!=f && d!=g && d!=h && d!=i    && e!=f && e!=g && e!=h && e!=i    && f!=g && f!=h && f!=i    && g!=h && g!=i    && h!=i    && a*100+b*10+c + d*100+e*10+f == g*100+h*10+i)    {      total++;      printf("%d%d%d+%d%d%d=%d%d%d\n",a,b,c,d,e,f,g,h,i);    }  }  printf("total=%d",total/2);  getchar(); getchar();  return 0;}
View Code


p60 上题,用标记法做

#include <stdio.h>int main(){  int a[10], i, total = 0, book[10], sum;  for(a[1] = 1; a[1] <= 9; a[1]++)    for(a[2] = 1; a[2] <= 9; a[2]++)      for(a[3] = 1; a[3] <= 9; a[3]++)        for(a[4] = 1; a[4] <= 9; a[4]++)          for(a[5] = 1; a[5] <= 9; a[5]++)            for(a[6] = 1; a[6] <= 9; a[6]++)              for(a[7] = 1; a[7] <= 9; a[7]++)                for(a[8] = 1; a[8] <= 9; a[8]++)  for(a[9] = 1; a[9] <= 9; a[9]++)  {    for(i = 1; i <= 9; i++)      book[i] = 0;    for(i = 1; i <= 9; i++)      book[a[i]] = 1;    sum = 0;    for(i = 1; i <= 9; i++)      sum += book[i];    if(sum == 9 && a[1] *100+a[2] *10+a[3] + a[4] *100+a[5] *10+a[6] == a[7]      *100+a[8] *10+a[9])    {      total++;      printf("%d%d%d+%d%d%d=%d%d%d\n", a[1], a[2], a[3], a[4], a[5], a[6], a[7],        a[8], a[9]);    }  }  printf("total=%d", total / 2);  getchar();  getchar();  return 0;}
View Code

 


第二节、炸弹人
p64 炸弹人。输出消灭敌人人数最多的那个空地位置的坐标

#include <stdio.h>int main(){  char a[20][21];  int i, j, sum, map = 0, p, q, x, y, n, m;  scanf("%d %d", &n, &m);  for(i = 0; i <= n - 1; i++)    scanf("%s", a[i]);  for(i = 0; i <= n - 1; i++)  {    for(j = 0; j <= m - 1; j++)    {      if(a[i][j] == .)      {        sum = 0;        //向上统计可以消灭的敌人数        x = i; y = j;        while(a[x][y] != #)        {          if(a[x][y] == G)            sum++;          x--;        }        //向下统计可以消灭的敌人数        x = i; y = j;        while(a[x][y] != #)        {          if(a[x][y] == G)            sum++;          x++;        }        //向左统计可以消灭的敌人数        x = i; y = j;        while(a[x][y] != #)        {          if(a[x][y] == G)            sum++;          y--;        }        //向右统计可以消灭的敌人数        x = i; y = j;        while(a[x][y] != #)        {          if(a[x][y] == G)            sum++;          y++;        }                if(sum > map)        {          map = sum;          p = i;          q = j;        }      }    }  }  //printf("将炸弹放置在(%d,%d),最多可以消灭%d个敌人\n", p, q, map);  printf("bomp here:(%d,%d),most is:%d\n",p,q,map);  getchar();  getchar();  return 0;}/*13 13##############GG.GGG#GGG.####.#G#G#G#G##.......#..G##G#.###.#G#G##GG.GGG.#.GG##G#.#G#.#.#####G...G.....##G#.#G###.#G##...G#GGG.GG##G#.#G#G#.#G##GG.GGG#G.GG##############*/
View Code

 


第三节、火柴棍等式
p68 火柴棍等式(提高组2008相关)

#include <stdio.h>int fun(int x){  int num=0;  int f[10]={6,2,5,5,4,5,6,3,7,6}; //0->9  while(x/10!=0)  {    num += f[x%10];    x = x/10;  }  num += f[x];  return num; //返回需要火柴棍的总根数}int main(){  int a,b,c,m,sum=0;  scanf("%d",&m);    for(a=0;a<=1111;a++)  {    for(b=0;b<=1111;b++)    {      c=a+b;      if(fun(a)+fun(b)+fun(c)==m-4)      {        printf("%d+%d=%d\n",a,b,c);        sum++;      }    }  }  //printf("一共可以拼出%d个不同的等式",sum);  printf("The sum is:%d",sum);  getchar();  getchar();  return 0;}/*18*/
View Code

 


第四节、数的全排列
p70 用循环实现3个数的全排列

#include <stdio.h>int main(){  int a,b,c;  for(a=1;a<=3;a++)    for(b=1;b<=3;b++)      for(c=1;c<=3;c++)        if(a!=b && a!=c && b!=c)          printf("%d%d%d\n",a,b,c);  getchar();  getchar();  return 0;}
View Code


p71 用循环实现4个数的全排列

#include <stdio.h>int main(){  int a,b,c,d;  for(a=1;a<=4;a++)    for(b=1;b<=4;b++)      for(c=1;c<=4;c++)        for(d=1;d<=4;d++)          if(a!=b && a!=c && a!=d &&             b!=c && b!=d &&             c!=d)            printf("%d%d%d%d\n",a,b,c,d);  getchar();  getchar();  return 0;}
View Code

 


 

 



oj
以后整理。。。

 

 

 

 

 



top

第三章、枚举!很暴力