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 ...
随机推荐
- layui框架中关于table方法级渲染和自动化渲染之间的区别简单介绍
方法级渲染: <table class="layui-hide" id="LAY_table_user" lay-filter="user&qu ...
- 用layui前端框架弹出form表单以及提交
第一步:引用两个文件 第二步:点击删除按钮弹出提示框 /*删除开始*/ $(".del").click(function () { var id = $(this).attr(&q ...
- Android下利用zxing类库实现扫一扫
程序源代码及可执行文件下载地址:http://files.cnblogs.com/rainboy2010/zxingdemo.zip zxing,一款无比强大的条码解析类库,下面讲解一下如何利用zxi ...
- Android 目前最稳定和高效的UI适配方案
Android系统发布十多年以来,关于Android的UI的适配一直是开发环节中最重要的问题,但是我看到还是有很多小伙伴对Android适配方案不了解.刚好,近期准备对糗事百科Android客户端设计 ...
- HttpListener通讯成功案例
1.创建WindowsService,如下代码 using System;using System.Net;using System.Net.Sockets;using System.ServiceP ...
- JavaScript从入门到精通(附光盘1张):作者:明日科技出版社:清华大学出版社出版时间:2012年09月
本书介绍 一:本书 pdf 获取信息 本书下载:请申请加入本群 (QQ群:668345923), 并联系群主. 本群主有:本书pdf 全文教材 及附带的 光盘内容 二:本书目录介绍 第1篇 基 ...
- 访问 Confluence 6 的计划任务配置
希望访问 Confluence 计划任务配置界面: 进入 > 基本配置(General Configuration) > 计划任务(Scheduled Jobs) 所有的计划任务将会按照 ...
- Confluence 6 用户目录图例 - 可读写连接 LDAP
上面的图:Confluence 连接到一个 LDAP 目录. https://www.cwiki.us/display/CONFLUENCEWIKI/Diagrams+of+Possible+Conf ...
- html 基本指令
命令: <pre> </pre> 格式化输出 <ol></ol> 有序 HTML 列表:示例: <pre> here is outout & ...
- OAuth2 token
1.资源服务器 package com.ruhuanxingyun.config; import com.fasterxml.jackson.databind.ObjectMapper; import ...