Noj - 在线强化训练4
| 状态 | 题号 | 竞赛题号 | 标题 |
|---|---|---|---|
| × | 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的更多相关文章
- Noj - 在线强化训练3
状态 题号 竞赛题号 标题 1091 A 求解逆波兰表达式(Calculate the reverse Polish notation) 1017 B 数列 1323 C 穷举n位二进制数 ...
- Noj - 在线强化训练2
状态 题号 竞赛题号 标题 1572 A 九鼎之尊(一) 1573 B 九鼎之尊(二) 1453 C 筛法(Sieve Method) 1134 D 亲密数(close numbers ...
- Noj - 在线强化训练1
1445 A 求n个整数的和 1564 B 判断一个数是否是完全数 1011 C 判素数(Prime number) 1566 D 输入一组整数,找出最小值 1200 E 判断三角 ...
- Hinton胶囊网络后最新研究:用“在线蒸馏”训练大规模分布式神经网络
Hinton胶囊网络后最新研究:用“在线蒸馏”训练大规模分布式神经网络 朱晓霞发表于目标检测和深度学习订阅 457 广告关闭 11.11 智慧上云 云服务器企业新用户优先购,享双11同等价格 立即抢购 ...
- Android:JNI强化训练
一.前言 Java本机接口(Java Native Interface (JNI))是本机编程接口,它是JDK的一部分,JNI它提供了若干的API,实现了和Java和其他通信(主要是C&C++ ...
- Python强化训练笔记(七)——使用deque队列以及将对象保存为文件
collections模块中的deque对象是一个队列,它有着正常队列的先进先出原则.我们可以利用这个对象来实现数据的保存功能. 例如,现有一个猜数字大小的游戏,系统开始会随机roll点一个0-100 ...
- Python强化训练笔记(六)——让字典保持有序性
python的字典是一个非常方便的数据结构,使用它我们可以轻易的根据姓名(键)来找到他的成绩,排名等(值),而不用去遍历整个数据集. 例如:{'Lee': [1, 100], 'Jane': [2, ...
- Python强化训练笔记(五)——找出多个字典中的公共键
在这个问题中,我们期望得到的结果是找到这三轮比赛中,每轮都进球的球员都有谁.下面用python来模拟一下,先生成一批数据: >>> from random import randin ...
- ACM: 强化训练-Beautiful People-最长递增子序列变形-DP
199. Beautiful People time limit per test: 0.25 sec. memory limit per test: 65536 KB input: standard ...
随机推荐
- [jquery]为jQuery.ajax添加onprogress事件
原理: 给XMLHttpRequest对象的upload属性绑定onprogress方法监听上传过程 var xhr = new XMLHttpRequest(); xhr.upload.onpro ...
- Python-mysql 权限 pymysql 注入共计
1.mysql用户管理 *** 数据安全非常重要 不可能随便分配root账户 应该按照不同开发岗位分配不同的账户和权限 mysql中 将于用户相关的数据放在mysql库 user - > db ...
- LINUX-redis & mongodb
ubuntu安装redis: apt-get -y install redis-serverubuntu启动redis: /etc/init.d/redis-server restart linux安 ...
- CentOS 7 连接ssh方法
自己在VMware中装了CentOS 6.3,然后主机(或者说xshell)与里面的虚拟机连不通,刚学习,一头雾水,查了半天,也不知道怎么弄. 经指点,找到下面这篇文章,感谢博主: http://bl ...
- DataGridView中进行增删改查
首先我们需要知道是在哪个数据库中的哪个表进行增删改查: 这就需要我们: 建立给连接服务器的类:(可以在方法类中建立) 建立一个对列名进行封装的类:方便数据之间的传接:(学到Linq-sql时这些就简便 ...
- maven项目使用log4j
日志是应用软件中不可缺少的部分,Apache的开源项目 log4j 是一个功能强大的日志组件,提供方便的日志记录. 1.maven项目在pom.xml导入log4j依赖: <dependency ...
- NIO(一)
1.NIO是什么? 是JDK1.4之后推出的一个新的IO操作(netty.mina通讯框架的底层都是NIO实现的连接) 2.NIO和IO的区别(阻塞只会出现在网络通讯中,都是同步) NIO:非阻塞类型 ...
- Nginx的进程模型及高可用方案(OpenResty)
1. Nginx 进程模型简介 Nginx默认采用多进程工作方式,Nginx启动后,会运行一个master进程和多个worker进程.其中master充当整个进程组与用户的交互接口,同时对进程进行监护 ...
- 进入页面,根据后台传过来的flag 判断列表隐藏与否
需求描述:页面中有两个列表,一个已添加,一个可以添加,进入页面的时候,如果已添加中有数据则显示,没有数据就隐藏,emmmm,这种需求,我该怎么吐槽嗷嗷嗷 解决思路:让已添加的列表的div默认隐藏,前台 ...
- 【mongo】centos6.9安装mongo2.6.3
参考:http://www.haorooms.com/post/3m 注意:centos6上就不要装mongo3了,容易出错. 1. 下载 curl -O http://downloads.mongo ...