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 ...
随机推荐
- 分享一份非常强势的Android面试题
马上步入金九银十了,是时候看一些面试题去鹅厂了,接下来我将分享一些面试题,每天总结一点点,希望对大家有所帮助! ListView和RecyclerView区别 参考链接: https://blog.c ...
- easyui datagrid 隔行变色
easyui datagrid 隔行变色 一:实现样图 二:实现代码 $('#dataGrid').datagrid({ rowStyler:function(index,row){ if (row ...
- Vmware Workstation _linux yum 仓库搭建
0:检查 vm虚拟机光盘是否已经连接 1. 检测yum 仓库是否已经配置好 [root@oracle ~]# yum list all 如果输入这条指令可以正确显示出rpm 包的列表,则说明yum 仓 ...
- Confluence 6 使用 WebDAV 客户端来对页面进行操作
下面的部分告诉你如何在不同的系统中来设置原生的 WebDAV 客户端,这个客户端通常显示在你操作系统的文件浏览器中,例如,Windows 的 Windows Explorer 或者 Linux 的 K ...
- Swift 通过字符串创建控制器
由于Swift 中新增了一个命名空间(在同一个命名空间中的文件可以直接访问而不用引入头文件)的概念 所以通过字符串创建控制器需要带上命名空间 1 首先为Bundle 写一个分类 获取命名空间 ext ...
- python并发编程之多线程2------------死锁与递归锁,信号量等
一.死锁现象与递归锁 进程也是有死锁的 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用, 它们都将无法推进下去.此时称系统处于死锁状态或系统 ...
- Django注册页面配置设计
一.上次回顾 Django数据的增查改删 models 中有userInfo 三个字段 user password phonenumber,models.userInfo.objects.all(). ...
- poj2942 求v-DCC,二分图判奇环,补图
/* 给定一张无向图,求有多少点不被任何奇环包含 推论1:如果两个点属于两个不同的v-DCC,则他们不可能在同一个奇环内 推论2:某个v-DCC中有奇环,则这个v-DCC中所有点必定被属于某个奇环 只 ...
- 20165314 2016-2017-2 《Java程序设计》第9周学习总结
20165314 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 URl类 UDP数据报 广播数据报 套接字 套接字连接机制 代码托管
- 20165314 Linux安装及学习
Linux的安装 安装虚拟机比我想象中要来的简单,虽然在这过程中出现了一些粗心大意导致的问题,但是重新再做一遍,问题就都解决了,比如: 未能加载虚拟光盘 在云班课的得到了同学的提示下我把虚拟机桌面的光 ...