状态 题号 竞赛题号 标题
× 1092 A 童年的回忆——计算24
× 1145 B 求图像的周长
× 1144 C 农场灌溉问题
× 1202 D 数独游戏
× 1243 E 循环赛日程表
× 1473 F 括号匹配
× 1474 G 四则元算表达式转换为逆波兰式
× 1501 H 用括号法递归建立二叉树
× 1541 I 加1乘2平方
× 1042 J 电子老鼠闯迷宫
× 1043 K 跳马
× 1571 L 八数码
1092.童年的回忆——计算24
时限:1000ms 内存限制:10000K  总时限:3000ms
描述
很多年过去了,每当想起儿时跟表弟玩计算24的游戏时的情景,还会情不自禁地微微一笑。
游戏的规则很简单:一副扑克牌,乱序后每局抽出4张,计算牌面点数经四则运算是否能得到24。先计算出的人扼要说出计算方法,验证无误后获得本局比赛胜利,得到4张牌。全部牌用完后谁手中的牌多即获得最后的胜利!
有些题目很简单,如2,2,2,3,常常看到你争我抢的局面,而有的题目则不太容易算出,甚至可能误判为无解,如2,4,9,10……
现在,我们都学会了编程。为了在多年后再一争高下,我们决定进行一次新的比拼:看谁写出的程序能既快又准地算出结果!比赛的基本规则不变,即仍是每局4个整数,运用四则运算(可以加括号),但为了降低程序设计的难度,除法的结果只保留整数部分,即5/2=2。
怎么样,你是不是也想加入我们的比赛呢?看看谁能获得最后的胜利!

输入
本题包含多个测例。
数据的第一行有一个整数N(0从第二行开始的N行,各包含4个不大于15的以空格分隔的非零整数。

输出
对于每个测例,如果可以计算得到24,则输出“Yes”,否则输出“No”。每个输出占一行。

输入样例
2
2 2 3 3
2 4 9 10

输出样例
Yes
Yes

提示

来源
icso.

1092.童年的回忆——计算24

 #include <iostream>
 #include <cstdio>
 #include <algorithm>
 #include <cstring>
 #include <cmath>
 using namespace std;

 int cal(int x, int y, int op); //定义加减乘除运算
 int search(int m); //回溯法遍历所有数字顺序
 int test(); //遍历所有运算符
 int calculate(int op1, int op2, int op3); //遍历所有括号形式

 int n;
 ];
 int main()
 {
     while(cin>>n)
     {
         while(n--)
         {
             ; j<; j++)
             {
                 cin>>a[j];
             }
             ))
                 cout<<"Yes"<<endl;
             else
                 cout<<"No"<<endl;
         }
     }
     ;
 }
 /*回溯法遍历所有数字顺序*/
 int search(int m)
 {
     )
     {
         )
             ;
     }
     else
     {
         ; i++)
         {
             swap(a[i], a[m]);
             ) == )
             {
                 );
             }
             swap(a[i], a[m]);
         }
     }
     ;
 }

 /*遍历所有运算符*/
 int test()
 {
     ; i<; i++)
         ; j<; j++)
             ; k<; k++)
                 )
                     ;
     ;
 }

 /*遍历所有括号形式*/
 int calculate(int op1, int op2, int op3)
 {
     ], a[], op1), a[], op2), a[], op3) == )
     {
         );
     }

     ], a[], op1), cal(a[], a[], op3), op2) == )
     {
         );
     }

     ], cal(a[], a[], op2), op1), a[], op3) == )
     {
         );
     }

     ], cal(cal(a[], a[], op2), a[], op3), op1) == )
     {
         );
     }

     ], cal(a[], cal(a[], a[], op3), op2), op1) == )
     {
         );
     }
     );
 }

 /*定义加减乘除运算*/
 int cal(int x, int y, int op)
 {
     switch(op)
     {
     :
         return x + y;
     :
         return x - y;
     :
         return x * y;
     :
         )
             return x / y;
         else
             ; //返回一个很大的数即刻
     }
 }

代码A

.循环赛日程表
时限:1000ms 内存限制:10000K  总时限:3000ms
描述
用分治算法生成循环赛日程表(1到2的n次方个人)

输入
一个小于等于7的正整数n

输出
循环赛日程表(1到2的n次方个人)

输入样例

输出样例

提示

来源

E1243.循环赛日程表

 #include <iostream>
 #include <cstdio>
 #include <algorithm>
 #include <cstring>
 #include <cmath>
 using namespace std;

 void creatTable(int n);
 void printTable(int n);
 ][]; //行和列都从1开始计数

 int main()
 {
     int n;
     while(cin>>n)
     {
         creatTable(n);
         printTable(n);
     }
     ;
 }

 void creatTable(int n)
 {
     peo[][] = ;
     peo[][] = ;
     peo[][] = ;
     peo[][] = ;
     ; k<=n; k++)//一共还需要分治n-1次,这是第2次
     {
         )); //左上角的子方阵的长度
         int now = pow(2.0, double(k)); //当前大方阵的长度
         ; i<=now; i++)
         {
             ; j<=now; j++)
             {
                 /*通过左上角填充左下角,左下角元素 = 左上角对应元素 + 2^(x-1)*/
                 peo[i][j] = peo[i-pre][j] + pre;
             }
         }
         ; i<=pre; i++)
         {
             ; j<=now; j++)
             {
                 /*通过左下角填充右上角,右上角元素 = 左下角对应元素*/
                 peo[i][j] = peo[i+pre][j-pre];
             }
         }
         ; i<=now; i++)
         {
             ; j<=now; j++)
             {
                 /*右下角元素 = 左上角元素*/
                 peo[i][j] = peo[i-pre][j-pre];
             }
         }
     }

 }
 void printTable(int n)
 {
     int num = pow(2.0, double(n)); //人数=2的n次方
     ; x<=num; x++)
     {
         ; y<num; y++)
         {
             cout<<peo[x][y]<<" ";
         }
         cout<<peo[x][num];
         cout<<endl;
     }
 }

代码E

.括号匹配
时限:1000ms 内存限制:10000K  总时限:3000ms
描述
假设一个算术表达式中可以包含三种括号:圆括号"("和")",方括号"["和"]"和花括号"{"和"}",且这三种括号可按任意的次序嵌套使用,如:...[...(...)...{...{...}...[...]...}...]...,编写程序判别给定表达式中所含括号是否正确配对出现。

输入
输入一个由这几种括号组成的字符串,字符串长度不大于100。

输出
若正确则输出"Yes",否则输出"No"。注意字母的大小写,结尾带回车。

输入样例
{()[]}{}

输出样例
Yes

1473.括号匹配

 #include <cstdio>
 #include <iostream>
 #include <cstring>
 #include <stack>
 using namespace std;

 int main()
 {
     string str;
     while(cin>>str)
     {
         stack<char> stack_str;
         ]==]==]=='}')
             cout<<"No"<<endl;
         else
         {
             ; i<str.length(); i++) //string类的length()或者size()函数返回的是unsigned integer(无符号数)类型。
             {
                 if(str[i]=='(' || str[i]=='[' || str[i]=='{')
                     stack_str.push(str[i]);
                 if(str[i]==')' && stack_str.top()=='(')
                 {
                     stack_str.pop();
                     continue;
                 }
                 if(str[i]==']' && stack_str.top()=='[')
                 {
                     stack_str.pop();
                     continue;
                 }
                 if(str[i]=='}'&& stack_str.top()=='{')
                 {
                     stack_str.pop();
                     continue;
                 }
             }
             if(stack_str.empty())
                 cout<<"Yes"<<endl;
             else
                 cout<<"No"<<endl;
         }
     }

     ;
 }

代码F

.四则元算表达式转换为逆波兰式
时限:1000ms 内存限制:10000K  总时限:3000ms
描述
假设表达式由单字母整数类型变量和双目四则运算符构成("+","-","*","/"),写一个程序,将一个通常书写形式且书写正确的表达式转换为逆波兰式。

输入
输入一个完整的正确的四则运算表达式,长度不超过100(其中仅含有:"("、")"、"a"、"b"和"c"五种字符)。

输出
输出这个表达式的逆波兰表达式。注意结尾带回车。

输入样例
输入样例一:(a+b)
输入样例二:((a+b)*(a-c))
输入样例三:((a*(b+c))-(a/c))

输出样例
输出样例一:ab+
输出样例二:ab+ac-*
输出样例三:abc+*ac/-

1474.四则元算表达式转换为逆波兰式

 #include <cstdio>
 #include <iostream>
 #include <cstring>
 #include <stack>
 using namespace std;

 int main()
 {
     ];
     stack<char> s;
     while(cin>>str)
     {
         while(!s.empty()) //清空栈
             s.pop();
         ;
         while(str[i++] != '\0')
         {
             if(str[i] == '(')
                 continue;
             else if(str[i]== 'a' || str[i]=='b' || str[i]=='c')
                 cout<<str[i];
             else if(str[i]=='+' || str[i]=='-' || str[i]=='*' || str[i]=='/')
                 s.push(str[i]);
             else if(str[i] == ')')
             {
                 cout<<s.top();
                 s.pop();
             }
         }
         cout<<endl;
     }
     ;
 }

代码G

.用括号法递归建立二叉树
时限:1000ms 内存限制:10000K  总时限:3000ms
描述
如果用大写字母标识二叉树节点,则一棵二叉树可以用以下字母序列建立,#表示空节点。试写一个递归算法,有这种形式的字符序列,建立相应的二叉树的二叉链表存储结构,并按层次遍历输出。如一棵二叉树可表示为:A(B(#,D),C(E(#,F),#))

输入
按题中要求,用括号法输入二叉树序列,#表示空节点

输出
按层次遍历建立好的二叉树并输出

输入样例
A(B(#,D),C(E(#,F),#))

输出样例
ABCDEF

1501.用括号法递归建立二叉树

 #include <iostream>
 #include <cstdio>
 #include <cstring>
 using namespace std;

 void printBinary();
 void createBinary(char c);

 ];
 ]; //用数组存储二叉树,下标2i代表i的左孩子,2i+1代表i的右孩子
 int pos; //用来记录二叉树下标
 ; //记录二叉树的长度
 int main()
 {

     while(cin>>str)
     {
         pos = ; //初始从1开始,不然0*2=0
         ; i<; i++)
             BinaryTree[i] = '#'; //二叉树初始化为0
         ;
         while(str[j]!='\0')
         {
             createBinary(str[j]);
             j++;
         }
         printBinary();
     }

     ;
 }

 /*将c插入二叉树数组*/
 void createBinary(char c)
 {
     if((c>='A' && c<='Z') || c=='#')
     {
         BinaryTree[pos] = c;
         length++;
     }
     else if(c=='(')
     {
         pos = pos * ;
     }
     else if(c==',')
     {
         pos += ;
     }
     else if(c==')')
     {
         pos /= ;
     }
 }

 void printBinary()
 {
     ; i<; i++)
     {
         if(BinaryTree[i] != '#')
             cout<<BinaryTree[i];
     }
     cout<<endl;
 }

代码H

.加1乘2平方
时限:1000ms 内存限制:10000K  总时限:3000ms
描述
最简单的队列的使用
#include <iostream>
#include <queue>
using namespace std;

queue<int> q1;
int main()
{
int temp, x;
q1.push();//入队
q1.push();//入队
temp = q1.front();//访问队首元素
q1.pop();//出队
q1.empty();//判队列是否为空
q1.back();//返回队尾元素
q1.size();//返回队列长度
}

给定两个正整数m、n,问只能做加1、乘2和平方这三种变化,从m变化到n最少需要几次

输入
输入两个10000以内的正整数m和n,且m小于n

输出
输出从m变化到n的最少次数

输入样例

输出样例

I 1541.加1乘2平方

 #include <iostream>
 #include <cstdio>
 #include <queue>
 #include <cstring>
 using namespace std;
 int bsf();
 int m, n;
 ]; //visited[i]=3 代表访问i的步数是3
 queue<int> q;
 int main()
 {
     while(cin>>m>>n)
     {
         memset(visited,  , sizeof(visited));
         cout<<bsf()<<endl;
     }
     ;
 }

 int bsf()
 {
     q.push(m);
     visited[m] = ;
     while(!q.empty())
     {
         int temp = q.front();
         q.pop();
         if(temp == n)
         {
             return visited[n];
         }
         <=n && !visited[temp+])
         {
             q.push(temp+);
             visited[temp+] = visited[temp] + ;
         }
         <=n && !visited[temp*])
         {
             q.push(temp*);
             visited[temp*] = visited[temp] + ;
         }
         if(temp*temp<=n && !visited[temp*temp])
         {
             q.push(temp*temp);
             visited[temp*temp] = visited[temp] + ;
         }
     }
     ;
 }

代码I

Noj - 在线强化训练4的更多相关文章

  1. Noj - 在线强化训练3

    状态 题号 竞赛题号 标题   1091 A 求解逆波兰表达式(Calculate the reverse Polish notation)   1017 B 数列   1323 C 穷举n位二进制数 ...

  2. Noj - 在线强化训练2

    状态 题号 竞赛题号 标题   1572 A 九鼎之尊(一)   1573 B 九鼎之尊(二)   1453 C 筛法(Sieve Method)   1134 D 亲密数(close numbers ...

  3. Noj - 在线强化训练1

      1445 A 求n个整数的和   1564 B 判断一个数是否是完全数   1011 C 判素数(Prime number)   1566 D 输入一组整数,找出最小值   1200 E 判断三角 ...

  4. Hinton胶囊网络后最新研究:用“在线蒸馏”训练大规模分布式神经网络

    Hinton胶囊网络后最新研究:用“在线蒸馏”训练大规模分布式神经网络 朱晓霞发表于目标检测和深度学习订阅 457 广告关闭 11.11 智慧上云 云服务器企业新用户优先购,享双11同等价格 立即抢购 ...

  5. Android:JNI强化训练

    一.前言 Java本机接口(Java Native Interface (JNI))是本机编程接口,它是JDK的一部分,JNI它提供了若干的API,实现了和Java和其他通信(主要是C&C++ ...

  6. Python强化训练笔记(七)——使用deque队列以及将对象保存为文件

    collections模块中的deque对象是一个队列,它有着正常队列的先进先出原则.我们可以利用这个对象来实现数据的保存功能. 例如,现有一个猜数字大小的游戏,系统开始会随机roll点一个0-100 ...

  7. Python强化训练笔记(六)——让字典保持有序性

    python的字典是一个非常方便的数据结构,使用它我们可以轻易的根据姓名(键)来找到他的成绩,排名等(值),而不用去遍历整个数据集. 例如:{'Lee': [1, 100], 'Jane': [2, ...

  8. Python强化训练笔记(五)——找出多个字典中的公共键

    在这个问题中,我们期望得到的结果是找到这三轮比赛中,每轮都进球的球员都有谁.下面用python来模拟一下,先生成一批数据: >>> from random import randin ...

  9. ACM: 强化训练-Beautiful People-最长递增子序列变形-DP

    199. Beautiful People time limit per test: 0.25 sec. memory limit per test: 65536 KB input: standard ...

随机推荐

  1. 通过dd命令显示硬盘的读写性能

    测试vdb硬盘的读写速度 1.分区格式化挂载vdb硬盘 2.新建写入文件2 3.测试:文件2中写入数据,设置块大小为100M,拷贝块个数为5 经过测试:测试效果一般count越高越准确,建议为300, ...

  2. tp5学习

    tp5的表单验证 tp5验证码的使用: tp5分页后页面跳转:少参数的处理方法: tp5绑定根目录为: public目录下的index.php 隐藏index.php .htaccess文件修改 控制 ...

  3. 使用XIB 或者storyboard 创建imageView 模式 UIViewContentModeScaleAspectFill  图片越界问题

    ImageView UIViewContentModeScaleAspectFill 超出边界的问题 代码如下 [_photoView setClipsToBounds:Yes];       sto ...

  4. Oracle从入门到精通(详细) 明日科技

  5. linux_OEL5.4_安装Oracle11g中文教程图解

    一.安装ORACLE10g 软件(11.2.0.0) 参考pdf:链接:http://pan.baidu.com/s/1pLHU94J 密码:keo8 (一)安装前的包支持 1. 虚拟机yum 环境搭 ...

  6. Confluence 6 Cron 表达式

    一个 cron 表达式是以 6-7 时间字段来定义一个计划任务是如何按照时间被执行的.每一个字段中的数据库而已为数字或者是一些特定的字符串来进行表达.每一个字段是使用空格或者 tab 进行分隔的. 下 ...

  7. React-Native到0.44版本后Navigator 不能用的问题

    新升级  到0.46版本以后 Navigator 不能使用报错. 'Navigator is deprecated and has been removed from this package. It ...

  8. CommonJs、AMD、CMD模块化规范

    /** * CommonJS 模块化规范 * CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作 */ /*-------Node.js遵循Commonjs规范----- ...

  9. php 重要函数归集

    1.json_encode 与 json_decode json_encode 把数组转化成字符串 json_encode(array) json_decode 把目标字符串转成数组json_deco ...

  10. stylus入门教程,在webstorm中配置stylus

    转载:https://www.cnblogs.com/wenqiangit/p/9717715.html#undefined   stylus特点 富于表现力.具有健壮性.功能丰富.动态编码 不需要写 ...