目录
L1-5 6翻了
题目
输入格式:
输出格式:
输入样例:
输出样例:
思路
AC代码
L1-1 嫑废话上代码
题目
输入格式:
输出格式:
输入样例:
输出样例:
AC代码
L1-8 刮刮彩票
题目
输入格式:
输出格式:
输入样例:
输出样例:
思路
AC代码
L2-1 特立独行的幸福
题目
输入格式:
输出格式:
输入样例 1:
输出样例 1:
输入样例 2:
输出样例 2:
思路
AC代码
L2-2 老板的作息表
题目
输入格式:
输出格式:
输入样例:
输出样例:
思路
AC代码
L1-6 打PTA
题目
输入格式:
输出格式:
输入样例:
输出样例:
AC代码
L2-3 浪漫侧影
思路
输入格式:
输出格式:
输入样例:
输出样例:
思路
AC代码
L1-2 两小时学完C语言
题目
输入格式:
输出格式:
输入样例:
输出样例:
AC代码
L1-4 降价提醒机器人
题目
输入格式:
输出格式:
输入样例:
输出样例:
AC代码
L1-7 天梯赛的善良
题目
输入格式:
输出格式:
输入样例:
输出样例:
AC代码
L1-3 程序员买包子
题目
输入格式:
输出格式:
输入样例 1:
输出样例 1:
输入样例 2:
输出样例 2:
输入样例 3:
输出样例 3:
AC代码
PS
L1-5 6翻了
题目
分数 15
作者 陈越
单位 浙江大学
“666”是一种网络用语,大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”,意思是“6翻了”,实在太厉害的意思。如果你以为这就是厉害的最高境界,那就错啦 —— 目前的最高境界是数字“27”,因为这是 3 个 “9”!
本题就请你编写程序,将那些过时的、只会用一连串“6666……6”表达仰慕的句子,翻译成最新的高级表达。
输入格式:
输入在一行中给出一句话,即一个非空字符串,由不超过 1000 个英文字母、数字和空格组成,以回车结束。
输出格式:
从左到右扫描输入的句子:如果句子中有超过 3 个连续的 6,则将这串连续的 6 替换成 9;但如果有超过 9 个连续的 6,则将这串连续的 6 替换成 27。其他内容不受影响,原样输出。
输入样例:
it is so 666 really 6666 what else can I say 6666666666
输出样例:
it is so 666 really 9 what else can I say 27
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
思路
遍历一次,每次遇到六就判断有几个连续的6.
AC代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
getline(cin,s);
int i=0;
string ans;
int len=s.length();
while(i<len){
if(s[i]!='6'){
ans+=s[i];
i++;
continue;
}
int cnt=0;
while(i<len&&s[i]=='6'){
cnt++;
i++;
}
if(cnt>3&&cnt<=9){
ans+="9";
}else if(cnt>9){
ans+="27";
}else if(cnt==1) ans+="6";
else if(cnt==2) ans+="66";
else if(cnt==3) ans+="666";
}
cout<<ans;
}
L1-1 嫑废话上代码
题目
分数 5
切换布局
作者 陈越
单位 浙江大学
Linux 之父 Linus Torvalds 的名言是:“Talk is cheap. Show me the code.”(嫑废话,上代码)。本题就请你直接在屏幕上输出这句话。
输入格式:
本题没有输入。
输出格式:
在一行中输出 Talk is cheap. Show me the code.
。
输入样例:
无
输出样例:
Talk is cheap. Show me the code.
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
AC代码
#include<iostream>
using namespace std;
int main()
{
cout<<"Talk is cheap. Show me the code.";
}
L1-8 刮刮彩票
题目
分数 20
作者 DAI, Longao
单位 杭州百腾教育科技有限公司
“刮刮彩票”是一款网络游戏里面的一个小游戏。如图所示:
每次游戏玩家会拿到一张彩票,上面会有 9 个数字,分别为数字 1 到数字 9,数字各不重复,并以 3×3 的“九宫格”形式排布在彩票上。
在游戏开始时能看见一个位置上的数字,其他位置上的数字均不可见。你可以选择三个位置的数字刮开,这样玩家就能看见四个位置上的数字了。最后玩家再从 3 横、3 竖、2 斜共 8 个方向中挑选一个方向,方向上三个数字的和可根据下列表格进行兑奖,获得对应数额的金币。
数字合计 | 获得金币 | 数字合计 | 获得金币 |
---|---|---|---|
6 | 10,000 | 16 | 72 |
7 | 36 | 17 | 180 |
8 | 720 | 18 | 119 |
9 | 360 | 19 | 36 |
10 | 80 | 20 | 306 |
11 | 252 | 21 | 1,080 |
12 | 108 | 22 | 144 |
13 | 72 | 23 | 1,800 |
14 | 54 | 24 | 3,600 |
15 | 180 |
现在请你写出一个模拟程序,模拟玩家的游戏过程。
输入格式:
输入第一部分给出一张合法的彩票,即用 3 行 3 列给出 0 至 9 的数字。0 表示的是这个位置上的数字初始时就能看见了,而不是彩票上的数字为 0。
第二部给出玩家刮开的三个位置,分为三行,每行按格式 x y
给出玩家刮开的位置的行号和列号(题目中定义左上角的位置为第 1 行、第 1 列。)。数据保证玩家不会重复刮开已刮开的数字。
最后一部分给出玩家选择的方向,即一个整数: 1 至 3 表示选择横向的第一行、第二行、第三行,4 至 6 表示纵向的第一列、第二列、第三列,7、8分别表示左上到右下的主对角线和右上到左下的副对角线。
输出格式:
对于每一个刮开的操作,在一行中输出玩家能看到的数字。最后对于选择的方向,在一行中输出玩家获得的金币数量。
输入样例:
1 2 3
4 5 6
7 8 0
1 1
2 2
2 3
7
输出样例:
1
5
6
180
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
思路
简单模拟
AC代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[]={0,0,0,0,0,0,
10000,36,720,360,80,252,108,72,54,180,
72,180,119,36,306,1080,144,1800,3600};
int b[4][4];
int x,y;
int sum=45;
for(int i=1;i<=3;i++){
for(int j=1;j<=3;j++){
cin>>b[i][j];
sum-=b[i][j];
if(b[i][j]==0) {
x=i,y=j;
}
}
}
b[x][y]=sum;
for(int i=0;i<3;i++){
int xi,yi;
cin>>xi>>yi;
cout<<b[xi][yi]<<endl;;
}
int f;
cin>>f;
int total=0;
if(f<=3){
for(int i=1;i<=3;i++)
total+=b[f][i];
}else if(f<=6){
for(int i=1;i<=3;i++)
total+=b[i][f-3];
}else if(f==7)
total+=b[1][1]+b[2][2]+b[3][3];
else
total+=b[3][1]+b[2][2]+b[1][3];
cout<<a[total];
}
L2-1 特立独行的幸福
题目
分数 25
作者 陈越
单位 浙江大学
对一个十进制数的各位数字做一次平方和,称作一次迭代。如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数。1 是一个幸福数。此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68,3 次迭代后得到 100,最后得到 1。则 19 就是幸福数。显然,在一个幸福数迭代到 1 的过程中经过的数字都是幸福数,它们的幸福是依附于初始数字的。例如 82、68、100 的幸福是依附于 19 的。而一个特立独行的幸福数,是在一个有限的区间内不依附于任何其它数字的;其独立性就是依附于它的的幸福数的个数。如果这个数还是个素数,则其独立性加倍。例如 19 在区间[1, 100] 内就是一个特立独行的幸福数,其独立性为 2×4=8。
另一方面,如果一个大于1的数字经过数次迭代后进入了死循环,那这个数就不幸福。例如 29 迭代得到 85、89、145、42、20、4、16、37、58、89、…… 可见 89 到 58 形成了死循环,所以 29 就不幸福。
本题就要求你编写程序,列出给定区间内的所有特立独行的幸福数和它的独立性。
输入格式:
输入在第一行给出闭区间的两个端点:1<A<B≤104。
输出格式:
按递增顺序列出给定闭区间 [A,B] 内的所有特立独行的幸福数和它的独立性。每对数字占一行,数字间以 1 个空格分隔。
如果区间内没有幸福数,则在一行中输出 SAD
。
输入样例 1:
10 40
输出样例 1:
19 8
23 6
28 3
31 4
32 3
注意:样例中,10、13 也都是幸福数,但它们分别依附于其他数字(如 23、31 等等),所以不输出。其它数字虽然其实也依附于其它幸福数,但因为那些数字不在给定区间 [10, 40] 内,所以它们在给定区间内是特立独行的幸福数。
输入样例 2:
110 120
输出样例 2:
SAD
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
思路
主要工作有两个,一是判断素数,二是判断能不能迭代成1,并且记录迭代次数。
判断是否是素数用6步步长的方法。
判断是不是特立独行幸福数和迭代次数时用类似于素数筛的思想。先建立一个visited数组,当visited[i]==0时,代表i目前还是特立独行的幸福数。然后依次从A遍历到B。每次遍历时不断迭代,迭代过程中有重复出现的数字就代表出现了死循环,就停止迭代。迭代过程中产生的数x不是特立独行,就标记visited[x]==1,下次遍历x时就直接跳过。
AC代码
#include<bits/stdc++.h>
using namespace std;
const int MAXSIZE=1e4+5;
int A,B;
int sum=0;
int visited[MAXSIZE];//==0-->还是
int diedai[MAXSIZE];//记录迭代次数
bool isprime(int n)
{
if(n==2||n==3) return true;
if(n%6!=5&&n%6!=1) return false;
for(int i=5;i*i<=n;i+=6) if(n%i==0||n%(i+2)==0) return false;
return true;
}
int change(int x)
{
int ans=0;
while(x){
int t=x%10;
ans+=t*t;
x/=10;
}
return ans;
}
int isfortun(int num)//返回-1表是不是
{
if(visited[num]==1) return -1;
map<int,int> mp;//用于判断是否进入死循环
mp[num]=1;
int x=num;
int cnt=0;//迭代次数
while(x!=1){
int later=change(x);
cnt++;
if(later==1) return cnt;
visited[later]=1;
//出现死循环
if(mp[later]!=0){
visited[later]=1;
return -1;
}
mp[later]=1;
x=later;
}
}
int main()
{
cin>>A>>B;
for(int i=A;i<=B;i++){
if(visited[i]==1) continue;
int a=isfortun(i);
if(a==-1) visited[i]=1;
else{
diedai[i]=a;
}
}
int cnt=0;
for(int i=A;i<=B;i++){
if(visited[i]==0){
bool flag=isprime(i);
int x=diedai[i]*((flag==true)?2:1);
if(cnt!=0) cout<<endl;
cout<<i<<" "<<x;
cnt++;
}
}
if(cnt==0)
cout<<"SAD";
}
L2-2 老板的作息表
题目
分数 25
作者 陈越
单位 浙江大学
新浪微博上有人发了某老板的作息时间表,表示其每天 4:30 就起床了。但立刻有眼尖的网友问:这时间表不完整啊,早上九点到下午一点干啥了?
本题就请你编写程序,检查任意一张时间表,找出其中没写出来的时间段。
输入格式:
输入第一行给出一个正整数 N,为作息表上列出的时间段的个数。随后 N 行,每行给出一个时间段,格式为:
hh:mm:ss - hh:mm:ss
其中 hh
、mm
、ss
分别是两位数表示的小时、分钟、秒。第一个时间是开始时间,第二个是结束时间。题目保证所有时间都在一天之内(即从 00:00:00 到 23:59:59);每个区间间隔至少 1 秒;并且任意两个给出的时间区间最多只在一个端点有重合,没有区间重叠的情况。
输出格式:
按照时间顺序列出时间表中没有出现的区间,每个区间占一行,格式与输入相同。题目保证至少存在一个区间需要输出。
输入样例:
8
13:00:00 - 18:00:00
00:00:00 - 01:00:05
08:00:00 - 09:00:00
07:10:59 - 08:00:00
01:00:05 - 04:30:00
06:30:00 - 07:10:58
05:30:00 - 06:30:00
18:00:00 - 19:00:00
输出样例:
04:30:00 - 05:30:00
07:10:58 - 07:10:59
09:00:00 - 13:00:00
19:00:00 - 23:59:59
代码长度限制
16 KB
Java (javac)
时间限制
900 ms
内存限制
128 MB
Python (python3)
时间限制
300 ms
内存限制
64 MB
其他编译器
时间限制
200 ms
内存限制
64 MB
栈限制
8192 KB
思路
将输入的所有作息按照开始时间进行排序,每个作息之间的间隔就是没有出现的区间。注意0点和最早的作息之间的间隔和最后一个作息和23:59之间的间隔
AC代码
#include<bits/stdc++.h>
using namespace std;
int h=0,m=0,s=0;
int cnt=0;
struct time{
int h1,h2;
int m1,m2;
int s1,s2;
};
bool cmp(struct time a,struct time b)
{
if(a.h1!=b.h1) return a.h1<b.h1;
if(a.m1!=b.m1) return a.m1<b.m1;
if(a.s1!=b.s1) return a.s1<b.s1;
}
bool compare(struct time a)//true-->cur在前
{
if(h==a.h1&&m==a.m1&&s==a.s1) return false;
if(h!=a.h1) return h<a.h1;
if(m!=a.m1) return m<a.m1;
if(s!=a.s1) return s<a.s1;
}
int main()
{
struct time T[100005];
int n;
cin>>n;
getchar();
for(int i=0;i<n;i++){
string s;
getline(cin,s);
T[i].h1=10*(s[0]-'0')+(s[1]-'0');
T[i].h2=10*(s[11]-'0')+(s[12]-'0');
T[i].m1=10*(s[3]-'0')+(s[4]-'0');
T[i].m2=10*(s[14]-'0')+(s[15]-'0');
T[i].s1=10*(s[6]-'0')+(s[7]-'0');
T[i].s2=10*(s[17]-'0')+(s[18]-'0');
}
sort(T,T+n,cmp);
/*
cout<<endl;
for(int i=0;i<n;i++){
printf("%02d:%02d:%02d - %02d:%02d:%02d\n",T[i].h1,T[i].m1,T[i].s1,T[i].h2,T[i].m2,T[i].s2);
}
cout<<endl;
*/
//
int cnt=0;
for(int i=0;i<n;i++){
bool flag=compare(T[i]);
if(flag){
if(cnt!=0) cout<<endl;
cnt++;
printf("%02d:%02d:%02d - %02d:%02d:%02d",h,m,s,T[i].h1,T[i].m1,T[i].s1);
}
h=T[i].h2;
m=T[i].m2;
s=T[i].s2;
}
if(!(h==23&&m==59&&s==59)){
if(cnt!=0) cout<<endl;
printf("%02d:%02d:%02d - 23:59:59",h,m,s);
}
}
L1-6 打PTA
题目
分数 15
作者 陈越
单位 浙江大学
传说这是集美大学的学生对话。本题要求你做一个简单的自动问答机,对任何一个问句,只要其中包含 PTA
就回答 Yes!
,其他一概回答 No.
。
输入格式:
输入第一行给出一个整型范围内的正整数 N,随后 N 行,每行给出一个长度不超过 80 的字符串,为用户输入的句子,由英文字母、数字、空格和标点符号组成,以回车结束。
输出格式:
对每一行句子,如果其结尾字符为问号 ?
则判断此句中有无 PTA
?如果有则在一行中输出 Yes!
,否则输出 No.
。如果不是问号结尾,则敷衍地回答 enen
。
输入样例:
5
Hello!
Do you still play WZRY?
Chi Ji?
you play PTA ah?
how about pta site?
输出样例:
enen
No.
No.
Yes!
No.
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
C++ (g++)
AC代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
getchar();
for(int i=0;i<n;i++){
string s;
getline(cin,s);
int len=s.length();
if(i!=0) cout<<endl;
if(len>0&&s[len-1]!='?') cout<<"enen";
else{
int pos=s.find("PTA");
if(pos==-1) cout<<"No.";
else cout<<"Yes!";
}
}
}
L2-3 浪漫侧影
思路
分数 25
作者 陈越
单位 浙江大学
“侧影”就是从左侧或者右侧去观察物体所看到的内容。例如上图中男生的侧影是从他右侧看过去的样子,叫“右视图”;女生的侧影是从她左侧看过去的样子,叫“左视图”。
520 这个日子还在打比赛的你,也就抱着一棵二叉树左看看右看看了……
我们将二叉树的“侧影”定义为从一侧能看到的所有结点从上到下形成的序列。例如下图这棵二叉树,其右视图就是 { 1, 2, 3, 4, 5 },左视图就是 { 1, 6, 7, 8, 5 }。
于是让我们首先通过一棵二叉树的中序遍历序列和后序遍历序列构建出一棵树,然后你要输出这棵树的左视图和右视图。
输入格式:
输入第一行给出一个正整数 N (≤20),为树中的结点个数。随后在两行中先后给出树的中序遍历和后序遍历序列。树中所有键值都不相同,其数值大小无关紧要,都不超过 int 的范围。
输出格式:
第一行输出右视图,第二行输出左视图,格式如样例所示。
输入样例:
8
6 8 7 4 5 1 3 2
8 5 4 7 6 3 2 1
输出样例:
R: 1 2 3 4 5
L: 1 6 7 8 5
感谢用户DSA修正数据!
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
思路
根据二叉树的中序遍历和后序遍历,构造出二叉树,然后再对二叉树层序遍历。
左视图就是只输出每一层的第一个。
右视图就是只输出每一层就最后一个。
建树的话用递归的方法建树,方法如下。
函数create(int l1,int r1,int l2,int r2)。l1,r1为中序遍历的左右端点;l2,r2为后序遍历的左右端点。数组arr1表示中序遍历,数组arr2表示后序遍历。
1、如果(l1>r1)或(l2>r2),结束函数。
2、建根节点,值为arr2[r2]。
3、在中序遍历中找到值为arr2[r2]的位置,记为pos。那么左右子树的节点数量分别为int leftCount=pos-l1,int rightCount=r1-pos;。那么[l1,pos-1]为左子树的中序遍历,[pos+1,r1]为右子树的中序遍历;[l2,l2+leftCount-1]为左子树的后序遍历,[l2+leftCount,r2-1]为右子树的后序遍历。
4、递归调用create建造左右子树,回到步骤。
AC代码
#include<bits/stdc++.h>
using namespace std;
struct node{
int value;
node* left;
node* right;
};
int n;
int arr1[30];//中序遍历
int arr2[30];//后序遍历
node* create(int l1,int r1,int l2,int r2)
{//参数分别为中序的首尾和后续的首尾
if(l1>r1||l2>r2) return NULL;
node* root=new node;
root->value=arr2[r2];
root->left=root->right=NULL;
//找中序根的位置
int pos=-1;
for(pos=l1;pos<=r1;pos++){
if(arr1[pos]==root->value)
break;
}
//递归建树
int leftCount=pos-l1;
int rightCount=r1-pos;
node* lchild=create(l1,pos-1,l2,l2+leftCount-1);
node* rchild=create(pos+1,r1,l2+leftCount,r2-1);
root->left=lchild;
root->right=rchild;
return root;
}
vector<int> gleft;
vector<int> gright;
void bfs(node* root)
{
if(!root) return;
queue<node*> q;
q.push(root);
while(!q.empty()){
int len=q.size();
for(int i=0;i<len;i++){
node* cur=q.front();
q.pop();
if(i==0) gleft.push_back(cur->value);
if(i==len-1) gright.push_back(cur->value);
if(cur->left) q.push(cur->left);
if(cur->right) q.push(cur->right);
}
}
}
int main()
{
cin>>n;
for(int i=0;i<n;i++) cin>>arr1[i];
for(int i=0;i<n;i++) cin>>arr2[i];
node* root=create(0,n-1,0,n-1);
bfs(root);
cout<<"R:";
for(auto x:gright)
cout<<" "<<x;
cout<<endl<<"L:";
for(auto x:gleft)
cout<<" "<<x;
}
L1-2 两小时学完C语言
题目
分数 5
作者 陈越
单位 浙江大学
知乎上有个宝宝问:“两个小时内如何学完 C 语言?”当然,问的是“学完”并不是“学会”。
假设一本 C 语言教科书有 N 个字,这个宝宝每分钟能看 K 个字,看了 M 分钟。还剩多少字没有看?
输入格式:
输入在一行中给出 3 个正整数,分别是 N(不超过 400 000),教科书的总字数;K(不超过 3 000),是宝宝每分钟能看的字数;M(不超过 120),是宝宝看书的分钟数。
题目保证宝宝看完的字数不超过 N。
输出格式:
在一行中输出宝宝还没有看的字数。
输入样例:
100000 1000 72
输出样例:
28000
AC代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m,k;
cin>>n>>m>>k;
cout<<n-m*k;
}
L1-4 降价提醒机器人
题目
分数 10
作者 DAI, Longao
单位 杭州百腾教育科技有限公司
小 T 想买一个玩具很久了,但价格有些高,他打算等便宜些再买。但天天盯着购物网站很麻烦,请你帮小 T 写一个降价提醒机器人,当玩具的当前价格比他设定的价格便宜时发出提醒。
输入格式:
输入第一行是两个正整数 N 和 M (1≤N≤100,0≤M≤1000),表示有 N 条价格记录,小 T 设置的价格为 M。
接下来 N 行,每行有一个实数 Pi(−1000.0<Pi<1000.0),表示一条价格记录。
输出格式:
对每一条比设定价格 M 便宜的价格记录 P
,在一行中输出 On Sale! P
,其中 P
输出到小数点后 1 位。
输入样例:
4 99
98.0
97.0
100.2
98.9
输出样例:
On Sale! 98.0
On Sale! 97.0
On Sale! 98.9
AC代码
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int cnt=0;
for(int i=0;i<n;i++)
{
double p;
cin>>p;
if(p<m){
if(cnt!=0) cout<<endl;
printf("On Sale! %.1lf",p);
cnt++;
}
}
}
L1-7 天梯赛的善良
题目
分数 20
作者 陈越
单位 浙江大学
天梯赛是个善良的比赛。善良的命题组希望将题目难度控制在一个范围内,使得每个参赛的学生都有能做出来的题目,并且最厉害的学生也要非常努力才有可能得到高分。
于是命题组首先将编程能力划分成了 106 个等级(太疯狂了,这是假的),然后调查了每个参赛学生的编程能力。现在请你写个程序找出所有参赛学生的最小和最大能力值,给命题组作为出题的参考。
输入格式:
输入在第一行中给出一个正整数 N(≤2×104),即参赛学生的总数。随后一行给出 N 个不超过 106 的正整数,是参赛学生的能力值。
输出格式:
第一行输出所有参赛学生的最小能力值,以及具有这个能力值的学生人数。第二行输出所有参赛学生的最大能力值,以及具有这个能力值的学生人数。同行数字间以 1 个空格分隔,行首尾不得有多余空格。
输入样例:
10
86 75 233 888 666 75 886 888 75 666
输出样例:
75 3
888 2
代码长度限制
16 KB
时间限制
200 ms
内存限制
64 MB
栈限制
8192 KB
AC代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int minn=1e8;
int cnt1=0;
int maxn=-1;
int cnt2=0;
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
if(x<minn){
minn=x;
cnt1=1;
}
else if(x==minn) cnt1++;
if(x>maxn){
maxn=x;
cnt2=1;
}
else if(x==maxn) cnt2++;
}
cout<<minn<<" "<<cnt1<<endl;
cout<<maxn<<" "<<cnt2;
}
L1-3 程序员买包子
题目
分数 10
作者 陈越
单位 浙江大学
这是一条检测真正程序员的段子:假如你被家人要求下班顺路买十只包子,如果看到卖西瓜的,买一只。那么你会在什么情况下只买一只包子回家?
本题要求你考虑这个段子的通用版:假如你被要求下班顺路买 N 只包子,如果看到卖 X 的,买 M 只。那么如果你最后买了 K 只包子回家,说明你看到卖 X 的没有呢?
输入格式:
输入在一行中顺序给出题面中的 N、X、M、K,以空格分隔。其中 N、M 和 K 为不超过 1000 的正整数,X 是一个长度不超过 10 的、仅由小写英文字母组成的字符串。题目保证 N=M。
输出格式:
在一行中输出结论,格式为:
- 如果 K=N,输出
mei you mai X de
; - 如果 K=M,输出
kan dao le mai X de
; - 否则输出
wang le zhao mai X de
.
其中X
是输入中给定的字符串 X。
输入样例 1:
10 xigua 1 10
输出样例 1:
mei you mai xigua de
输入样例 2:
10 huanggua 1 1
输出样例 2:
kan dao le mai huanggua de
输入样例 3:
10 shagua 1 250
输出样例 3:
wang le zhao mai shagua de
AC代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m,k;
string x;
cin>>n>>x>>m>>k;
if(k==n) cout<<"mei you mai "<<x<<" de";
else if(k==m) cout<<"kan dao le mai "<<x<<" de";
else cout<<"wang le zhao mai "<<x<<" de";
}
PS
还有两题没写,就不发了。