第三章、枚举!很暴力

第一节、坑爹的奥数
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;
}

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;
}

第二节、炸弹人
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#
#############

*/

第三节、火柴棍等式
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

*/

第四节、数的全排列
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;
}

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;
}



oj
以后整理。。。

top

时间: 2024-08-22 14:28:11

第三章、枚举!很暴力的相关文章

紫书第三章训练2 暴力集

A - Master-Mind Hints MasterMind is a game for two players. One of them, Designer, selects a secret code. The other, Breaker, tries to break it. A code is no more than a row of colored dots. At the beginning of a game, the players agree upon the leng

第三部分 基本类型:第15章 枚举类型和位标志

15.1 枚举类型枚举类型定义了一组“符号名称/值”配对.例如,以下Color类型定义了一组符合,每个符号表示一种颜色. internal enum Color{ White, //赋值0 Red, //赋值1 Green, //赋值2 Blue, //赋值3 Orange //赋值4 } 枚举类型的好处:枚举类型容易编写.阅读和维护.枚举类型是强类型. 派生关系:System.Object -> System.ValueType -> System.Enum -> 枚举类型 枚举类型是

紫书第三章 数组和字符串

1  序 系统的整理下第三章的学习笔记.例题代码是在未看书本方法前自己尝试并AC的代码,不一定比书上的标程好:习题除了3-8百度了求解方法,其它均独立完成后,会适当查阅网上资料进行整理总结.希望本博文方便自己日后复习的同时,也能给他人带来点有益的帮助(建议配合紫书--<算法竞赛入门经典(第2版)>阅读本博客).有不足或错误之处,欢迎读者指出. 2  例题 2.1  UVa272--Tex Quotes #include <stdio.h> int main() { bool log

第三章学习小结—-转

[学习目标] 01掌握一维数组的声明和使用方法(OK) 02掌握二维数组的声明和使用方法(OK) 03掌握字符串的声明.赋值.比较和连接方法(连接很少用) 04熟悉字符的ASCII码和ctype.h中的字符函数 05正确认识++.+=等能修改变量的运算符(OK) 06学会用编译选项-Wall获得更多的警告信息(OK) 07了解不同操作系统中换行符的表示方法(嗯) 08掌握fgetc和getchar的使用方法(fgetc基本没用过) 09掌握预处理和迭代开发的技巧(嗯) 程序3-1 逆序输出 输入

JavaScript高级程序设计(第3版)第三章读书笔记

第三章  基本概念 ECMAScript中的一切(变量.函数名和操作符)都区分大小写. 标识符是指变量.函数.属性的名字,或者函数的参数. 标识符的组成规则是:第一个字符必须是一个字母.下划线(_)或一个美元符号($):其他字符可以是字母.下划线.美元符号或数字. ECMAScript标识符采用驼峰大小写格式. ECMAScript注释包括单行注释(//)和块级注释(/*  *  */). ECMAScript 5引入了严格模式的概念,严格模式是为JavaScript定义了一种不同的解析与执行模

第三章线程同步辅助类

Java 7 并发编程实战手册目录 代码下载(https://github.com/Wang-Jun-Chao/java-concurrency) 第三章线程同步辅助类 3.1简介 ?信号量(Semaphore):是一种计数器,用来保护一个或者多个共享资源的访问.它是并发编程的一种基础工具,大多数编程语言都提供了这个机制. ? CountDownLatch:是Java语言提供的同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许线程一直等待. ? CyclicBarrier也是Java语言

Welcome to Swift (苹果官方Swift文档初译与注解二十三)---154~162页(第三章--集合类型)

Dictionaries (字典) 字典像是一个容器,它可以存放很多相同类型的值.每个值都有与之关联的唯一的键,键在字典里的作用,就像是每个值的身份证标识一样.与数组中的元素不同,字典里的每个元素没有 固定的循序.当你使用字典并且要查询一个值的时候,需要使用值的标识(key)才行.这就像是你在生活里使用一本字典来查找某个单词的定义一样. 在Swift中,字典能够存储的类型需要明确定义.这与OC中的NSDictionary 类和NSMutableDictionary 类很不同,OC中它们可以使用任

第三章 垃圾收集器和内存分配策略

第三章 垃圾收集器和内存分配策略 对象已死吗 引用计算方法 可达性分析算法 通过一些列的GC roots 对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径成为引用链,当一个对象到GC roots 没有任何引用链的则证明对象不可用的 虚拟机栈中的引用的对象 方法区中类静态属性引用的对象 方法去区中常量引用的对象 本地方法栈中JNI引用的对象 生存还是死亡 一次筛选,筛选是否有必要执行 finalize()方法 没有覆盖或者finalize()已经被调用过  视为没必要执行 放入一个F-Qu

(转载)虚幻引擎3--第三章–Unreal中的类

第三章–Unreal中的类 3.1概述 3.2 NATIVE 对 非-NATIVE 3.3类声明 EXTENDS 关键字 指南 3.1您的第一个类声明 3.4类的修饰符 NATIVE(PACKAGENAME) NATIVEREPLICATION DEPENDSON(CLASSNAME[,CLASSNAME,...]) ABSTRACT DEPRECATED TRANSIENT NONTRANSIENT CONFIG(ININAME) Engine Editor Game Input PEROBJ

Java Persistence with MyBatis 3(中文版) 第三章 使用XML配置SQL映射器

关系型数据库和SQL是经受时间考验和验证的数据存储机制.和其他的ORM 框架如Hibernate不同,MyBatis鼓励开发者可以直接使用数据库,而不是将其对开发者隐藏,因为这样可以充分发挥数据库服务器所提供的SQL语句的巨大威力.与此同时,MyBaits消除了书写大量冗余代码的痛苦,它使使用SQL更容易. 在代码里直接嵌套SQL语句是很差的编码实践,并且维护起来困难.MyBaits使用了映射器配置文件或注解来配置SQL语句.在本章中,我们会看到具体怎样使用映射器配置文件来配置映射SQL语句.