【无标题】

一、重要的话说三遍

1.题目

这道超级简单的题目没有任何输入。

你只需要把这句很重要的话 —— “I’m gonna WIN!”——连续输出三遍就可以了。

注意每遍占一行,除了每行的回车不能有任何多余字符。

4.代码

#include<bits/stdc++.h>
using namespace std;

int main(){
	cout<<"I'm gonna WIN!"<<endl;
	cout<<"I'm gonna WIN!"<<endl;
	cout<<"I'm gonna WIN!"<<endl;
}

二、日期格式化

1.题目

世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。
输入格式:
输入在一行中按照“mm-dd-yyyy”的格式给出月、日、年。题目保证给出的日期是1900年元旦至今合法的日期。

输出格式:
在一行中按照“yyyy-mm-dd”的格式给出年、月、日。

2.样例

输入

03-15-2017

输出

2017-03-15

4.代码

#include<bits/stdc++.h>
using namespace std;

int main(){
	int x,y,z;
	scanf("%d-%d-%d",&x,&y,&z);
	printf("%d-%02d-%02d",z,x,y);
}

三、大笨钟

1.题目

微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律,所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那个整点数;如果过了整点,就敲下一个整点数。另外,虽然一天有24小时,钟却是只在后半天敲1~12下。例如在23:00敲钟,就是“当当当当当当当当当当当”,而到了23:01就会是“当当当当当当当当当当当当”。在午夜00:00到中午12:00期间(端点时间包括在内),笨钟是不敲的。

下面就请你写个程序,根据当前时间替大笨钟敲钟。

输入格式:
输入第一行按照hh:mm的格式给出当前时间。其中hh是小时,在00到23之间;mm是分钟,在00到59之间。

输出格式:
根据当前时间替大笨钟敲钟,即在一行中输出相应数量个Dang。如果不是敲钟期,则输出:

Only hh:mm. Too early to Dang.
其中hh:mm是输入的时间。

2.样例

输入

19:05

输出

DangDangDangDangDangDangDangDang

4.代码

#include<bits/stdc++.h>
using namespace std;

int main(){
	int x,y;
	scanf("%d:%d",&x,&y);
	if(x>12){
		for(int i=1;i<=x-12;i++)
		cout<<"Dang";
		if(y>0)
		cout<<"Dang";
	}else{
		printf("Only %02d:%02d.  Too early to Dang.",x,y);
	}
}

四、拯救外星人

1.题目

你的外星人朋友不认得地球上的加减乘除符号,但是会算阶乘 —— 正整数 N 的阶乘记为 “N!”,是从 1 到 N 的连乘积。所以当他不知道“5+7”等于多少时,如果你告诉他等于“12!”,他就写出了“479001600”这个答案。

本题就请你写程序模仿外星人的行为。

2.样例

输入

3 6

输出

362880

4.代码

#include<bits/stdc++.h>
using namespace std;
long long a,b,sum=1;
int main(){
	cin>>a>>b;
	int m=a+b;
	for(int i=1;i<=m;i++){
		sum*=i;
	}
	cout<<sum;
}

五、个位数统计

1.题目

给定一个 k 位整数 N=d
k−1

10
k−1
+⋯+d
1

10
1
+d
0

(0≤d
i

≤9, i=0,⋯,k−1, d
k−1

0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。

输入格式:
每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。

输出格式:
对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。

2.样例

输入

100311

输出

0:2
1:3
3:1

4.代码

#include<bits/stdc++.h>
using namespace std;
char s[100000];
int a[10];
int main(){
	cin>>s;
	int len=strlen(s);
	for(int i=0;i<len;i++){
		int x=s[i]-'0';
		a[x]++;
	}
	for(int i=0;i<=9;i++){
		if(a[i]>0){
			printf("%d:%d\n",i,a[i]);
		} 
	}
}

六、正整数A+B

1.题目

题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。

输入格式:
输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。

注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。

输出格式:
如果输入的确是两个正整数,则按格式A + B = 和输出。如果某个输入不合要求,则在相应位置输出?,显然此时和也是?。

2.样例

输入

123 456

输出

123 + 456 = 579

4.代码

#include<bits/stdc++.h>
using namespace std;
bool Num(char ch) {
	return !isdigit(ch);
}
int main() {	
	int addkey = 0; 
	string A, B;
	cin >> A;
	getchar();
	getline(cin, B);
	if (count_if(A.begin(), A.end(), Num) == 0&&stoi(A)<=1000&&stoi(A)>=1)
		cout << A;
	else {
		cout << "?";
		addkey = 1;
	}
	cout << " + ";
	if (count_if(B.begin(), B.end(), Num) == 0 && stoi(B) <= 1000 && stoi(B) >= 1)
		cout << B;
	else {
		cout << "?";
		addkey = 1;
	}
	cout << " = ";
	if (addkey)
		cout << "?";
	else
		cout << stoi(A) + stoi(B);
	return 0;
}

七、打印沙漏

1.题目

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印





所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。

输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

2.样例

输入

19 *

输出

*****
 ***
  *
 ***
*****
2

4.代码

#include<bits/stdc++.h>
using namespace std;
int n;
char a;
int main(){
	cin>>n;
	cin>>a;
	int sum=n-1;
	int x;
	for(int i=3;sum>=0;i=i+2){
		sum-=i*2;
		x=i;
	}
	sum+=x*2;
	x-=2;
	int k=0;
	for(int i=x;i>=1;i-=2){
		for(int j=k;j>=1;j--)
		cout<<" ";
		k++;
		for(int j=1;j<=i;j++)
		cout<<a;
		cout<<endl;
	}
	k-=2;
	for(int i=3;i<=x;i+=2){
		for(int j=k;j>=1;j--)
		cout<<" ";
		k--;
		for(int j=1;j<=i;j++)
		cout<<a;
		cout<<endl;
	}
	cout<<sum;
}

八、机工士姆斯塔迪奥

1.题目

在 MMORPG《最终幻想14》的副本“乐欲之所瓯博讷修道院”里,BOSS 机工士姆斯塔迪奥将会接受玩家的挑战。

你需要处理这个副本其中的一个机制:N×M 大小的地图被拆分为了 N×M 个 1×1 的格子,BOSS 会选择若干行或/及若干列释放技能,玩家不能站在释放技能的方格上,否则就会被击中而失败。

给定 BOSS 所有释放技能的行或列信息,请你计算出最后有多少个格子是安全的。

输入格式:
输入第一行是三个整数 N,M,Q (1≤N×M≤10
5
,0≤Q≤1000),表示地图为 N 行 M 列大小以及选择的行/列数量。

接下来 Q 行,每行两个数 T
i

,C
i

,其中 T
i

=0 表示 BOSS 选择的是一整行,T
i

=1 表示选择的是一整列,C
i

为选择的行号/列号。行和列的编号均从 1 开始。

输出格式:
输出一个数,表示安全格子的数量。

2.样例

输入

5 5 3
0 2
0 4
1 3

输出

12

4.代码

#include<bits/stdc++.h>
using namespace std;
long long n,m,q;
long long sum,sum1,sum2;
map<int,int>mp1;
map<int,int>mp2;
int main(){
	cin>>n>>m>>q;
	while(q--){
		int x,y;
		cin>>x>>y;
		if(x==0){
			if(mp1[y]==0)
			sum+=m,sum1++,mp1[y]++;
		}
		else{
			if(mp2[y]==0)
			sum+=n,sum2++,mp2[y]++;
		}
	}
	sum-=sum1*sum2;
	long long summ=n*m;
	cout<<summ-sum;
}

九、排座位

1.题目

布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。

输入格式:
输入第一行给出3个正整数:N(≤100),即前来参宴的宾客总人数,则这些人从1到N编号;M为已知两两宾客之间的关系数;K为查询的条数。随后M行,每行给出一对宾客之间的关系,格式为:宾客1 宾客2 关系,其中关系为1表示是朋友,-1表示是死对头。注意两个人不可能既是朋友又是敌人。最后K行,每行给出一对需要查询的宾客编号。

这里假设朋友的朋友也是朋友。但敌人的敌人并不一定就是朋友,朋友的敌人也不一定是敌人。只有单纯直接的敌对关系才是绝对不能同席的。

输出格式:
对每个查询输出一行结果:如果两位宾客之间是朋友,且没有敌对关系,则输出No problem;如果他们之间并不是朋友,但也不敌对,则输出OK;如果他们之间有敌对,然而也有共同的朋友,则输出OK but…;如果他们之间只有敌对关系,则输出No way。

2.样例

输入

7 8 4
5 6 1
2 7 -1
1 3 1
3 4 1
6 7 -1
1 2 1
1 4 1
2 3 -1
3 4
5 7
2 3
7 2

输出

No problem
OK
OK but...
No way

4.代码

#include<bits/stdc++.h>
using namespace std;
int n,m,k;
int mp1[200][200];
int mp2[200][200];
int main(){
	cin>>n>>m>>k;
	for(int i=1;i<=m;i++){
		int x,y,z;cin>>x>>y>>z;
		mp1[x][y]=z;
		mp1[y][x]=z;
		mp2[x][y]=z;
		mp2[y][x]=z;
	}
	int nn=n;
	while(nn--){
		for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i==j) continue;
			if(mp2[i][j]==1){
			for(int k=1;k<=n;k++){
				if(k==i) continue;
				if(mp2[j][k]==1)
				mp2[i][k]=1,mp2[k][i]=1;
			}
			}
		}
	}
	} 
	while(k--){
		int x,y;
		cin>>x>>y;
		if(mp2[x][y]==1&&mp1[x][y]!=-1)
		cout<<"No problem"<<endl;
		else if(mp2[x][y]==0)
		cout<<"OK"<<endl;
		else if(mp1[x][y]==-1&&mp2[x][y]==1)
		cout<<"OK but..."<<endl;
		else cout<<"No way"<<endl;
	}
}


十、名人堂与代金券

1.题目

对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,总评成绩必须达到 60 分及以上,并且有另加福利:总评分在 [G, 100] 区间内者,可以得到 50 元 PAT 代金券;在 [60, G) 区间内者,可以得到 20 元PAT代金券。全国考点通用,一年有效。同时任课老师还会把总评成绩前 K 名的学生列入课程“名人堂”。本题就请你编写程序,帮助老师列出名人堂的学生,并统计一共发出了面值多少元的 PAT 代金券。

输入格式:
输入在第一行给出 3 个整数,分别是 N(不超过 10 000 的正整数,为学生总数)、G(在 (60,100) 区间内的整数,为题面中描述的代金券等级分界线)、K(不超过 100 且不超过 N 的正整数,为进入名人堂的最低名次)。接下来 N 行,每行给出一位学生的账号(长度不超过15位、不带空格的字符串)和总评成绩(区间 [0, 100] 内的整数),其间以空格分隔。题目保证没有重复的账号。

输出格式:
首先在一行中输出发出的 PAT 代金券的总面值。然后按总评成绩非升序输出进入名人堂的学生的名次、账号和成绩,其间以 1 个空格分隔。需要注意的是:成绩相同的学生享有并列的排名,排名并列时,按账号的字母序升序输出。

2.样例

输入

10 80 5
cy@zju.edu.cn 78
cy@pat-edu.com 87
1001@qq.com 65
uh-oh@163.com 96
test@126.com 39
anyone@qq.com 87
zoe@mit.edu 80
jack@ucla.edu 88
bob@cmu.edu 80
ken@163.com 70

输出

360
1 uh-oh@163.com 96
2 jack@ucla.edu 88
3 anyone@qq.com 87
3 cy@pat-edu.com 87
5 bob@cmu.edu 80
5 zoe@mit.edu 80

4.代码

#include <bits/stdc++.h>
using namespace std;
struct node
{
    char s[20];
    int data;
};
bool cmp(node a,node b)
{
    if(a.data==b.data)
    {
        return strcmp(a.s,b.s)<0;
    }
    return a.data>b.data;
}
int main()
{
    int n,g,k,i,sum=0,t;
    struct node a[10100];
    scanf("%d %d %d",&n,&g,&k);
    getchar();
    for(i=1; i<=n; i++)
    {
        scanf("%s %d",a[i].s,&a[i].data);
        getchar();
        if(a[i].data>=g)
            sum+=50;
        else if(a[i].data>=60)
            sum+=20;
    }
    sort(a+1,a+n+1,cmp);
    printf("%d\n",sum);
    t=1;
    for(i=1; i<=n; i++)
    {
        if(i!=1&&a[i].data<a[i-1].data)
            t=i;
        if(t>k)
            break;
        printf("%d %s %d\n",t,a[i].s,a[i].data);
    }
    return 0;
}

十一、 包装机

1.题目

一种自动包装机的结构如图 1 所示。首先机器中有 N 条轨道,放置了一些物品。轨道下面有一个筐。当某条轨道的按钮被按下时,活塞向左推动,将轨道尽头的一件物品推落筐中。当 0 号按钮被按下时,机械手将抓取筐顶部的一件物品,放到流水线上。图 2 显示了顺序按下按钮 3、2、3、0、1、2、0 后包装机的状态。图 2 顺序按下按钮 3、2、3、0、1、2、0 后包装机的状态

一种特殊情况是,因为筐的容量是有限的,当筐已经满了,但仍然有某条轨道的按钮被按下时,系统应强制启动 0 号键,先从筐里抓出一件物品,再将对应轨道的物品推落。此外,如果轨道已经空了,再按对应的按钮不会发生任何事;同样的,如果筐是空的,按 0 号按钮也不会发生任何事。

现给定一系列按钮操作,请你依次列出流水线上的物品。

2.样例

输入

3 4 4
GPLT
PATA
OMSA
3 2 3 0 1 2 0 2 2 0 -1

输出

MATA

4.代码

#include<bits/stdc++.h>
using namespace std;
int n,m,si,len;
vector<char>e[101];
vector<char>d;
string s[10001];
char b[100001];
int main(){
	cin>>n>>m>>si;
	for(int i=1;i<=n;i++)
	cin>>s[i];
	for(int i=1;i<=n;i++){
		for(int j=m-1;j>=0;j--){
			e[i].push_back(s[i][j]);
		}
	}
	while(1){
		int x;cin>>x;
		if(x==-1) break;
		if(x==0){
			if(d.size()==0);
			else{
				char ss=d.back();
				d.pop_back();
				b[len++]=ss;
			}
		}else{
			if(e[x].size()==0) ;
			else{
				if(d.size()==si){
				char ss=d.back();
				d.pop_back();
				b[len++]=ss;
				}
				char ss=e[x].back();
				e[x].pop_back();
				d.push_back(ss);
			}
		}
	}
	for(int i=0;i<len;i++)
	cout<<b[i];
}

十二、 愿天下有情人都是失散多年的兄妹

1.题目

呵呵。大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人、父母、祖父母、曾祖父母、高祖父母)则不可通婚。本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚?

输入格式:
输入第一行给出一个正整数N(2 ≤ N ≤10
4
),随后N行,每行按以下格式给出一个人的信息:

本人ID 性别 父亲ID 母亲ID
其中ID是5位数字,每人不同;性别M代表男性、F代表女性。如果某人的父亲或母亲已经不可考,则相应的ID位置上标记为-1。

接下来给出一个正整数K,随后K行,每行给出一对有情人的ID,其间以空格分隔。

注意:题目保证两个人是同辈,每人只有一个性别,并且血缘关系网中没有乱伦或隔辈成婚的情况。

输出格式:
对每一对有情人,判断他们的关系是否可以通婚:如果两人是同性,输出Never Mind;如果是异性并且关系出了五服,输出Yes;如果异性关系未出五服,输出No。

2.样例

输入

24
00001 M 01111 -1
00002 F 02222 03333
00003 M 02222 03333
00004 F 04444 03333
00005 M 04444 05555
00006 F 04444 05555
00007 F 06666 07777
00008 M 06666 07777
00009 M 00001 00002
00010 M 00003 00006
00011 F 00005 00007
00012 F 00008 08888
00013 F 00009 00011
00014 M 00010 09999
00015 M 00010 09999
00016 M 10000 00012
00017 F -1 00012
00018 F 11000 00013
00019 F 11100 00018
00020 F 00015 11110
00021 M 11100 00020
00022 M 00016 -1
00023 M 10012 00017
00024 M 00022 10013
9
00021 00024
00019 00024
00011 00012
00022 00018
00001 00004
00013 00016
00017 00015
00019 00021
00010 00011

输出

Never Mind
Yes
Never Mind
No
Yes
No
Yes
No
No

4.代码

#include<bits/stdc++.h>
using namespace std;
int n,k,flag; 
vector<int>e[100000];
bool f[100000],s[100000];
void dfs(int x,int sum){
	if(sum==4) return;
	for(int i=0;i<e[x].size();i++){
		int y=e[x][i];
		if(y==-1) continue;
		if(f[y]==1)
		flag=1;
		else{
			f[y]=1;
			dfs(y,sum+1);
		}
	}
} 
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		int x,y,z;
		char m;
		cin>>x>>m>>y>>z;
		if(m=='M')
		s[x]=1;
		else
		s[x]=0;
		if(y!=-1) s[y]=1;
		if(z!=-1) s[z]=0;
		e[x].push_back(y);
		e[x].push_back(z);
	}
	cin>>k;
	while(k--){
		int x,y;
		cin>>x>>y;
		if(s[x]==s[y]){
			cout<<"Never Mind"<<endl;
			continue ;
		}
		memset(f,0,sizeof(f));
		flag=0;
		if(x!=-1)
		f[x]=1,dfs(x,0);
		if(y!=-1)
		f[y]=1,dfs(y,0);
		if(flag){
			cout<<"No"<<endl;
		}else cout<<"Yes"<<endl;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木易·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值