ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

吴凡的题库——快快编程501-700

2022-04-18 08:31:06  阅读:400  来源: 互联网

标签:输出 int 700 输入输出 样例 格式 题库 输入 吴凡


  1. 排座椅
题目描述
上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳。

同学们在教室中坐成了M行N列,坐在第i行第j列的同学的位置是(i,j),为了方便同学们进出,在教室中设置了K条横向的通道,L条纵 向的通道。

于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅间通道的位置,因为如果一条通道隔开了两个会交头接耳的同学,那么他们就不会交头接耳了。

请你帮忙给小雪编写一个程序,给出最好的通道划分方案。在该方案下,上课时交头接耳的学生的对数最少。
输入输出格式
输入格式
输入文件chair.in 第一行,有5个用空格隔开的整数,分别是M,N,K,L,D(2<=N,M<=1000,0<=K<M,0<=L<N,D<=2000)。
接下来的D行,每行有4个用空格隔开的整数。第i行的4个整数Xi,Yi,Pi,Qi,表示坐在位置(Xi,Yi)与(Pi,Qi)的两个同学会交头接耳(输入保证他们前后相邻或者左右相邻)。
输入数据保证最优方案的唯一性。
输出格式
输出文件chair.out 共两行。
第一行包含K个整数,a1,a2……aK,表示第a1行和a1+1行之间、第a2行和a2+1行之间、…、第aK行和第aK+1行之间要开辟通道,其中ai< ai+1,每两个整数之间用空格隔开(行尾没有空格)。
第二行包含L个整数,b1,b2……bL,表示第b1列和b1+1列之间、第b2列和b2+1列之间、…、第bL列和第bL+1列之间要开辟通道,其中bi< bi+1,每两个整数之间用空格隔开(列尾没有空格)。
输入输出样例
输入样例#1:
4 5 1 2 3
4 2 4 3
2 3 3 3
2 5 2 4
输出样例#1:
2
2 4
输入样例#2:
无
输出样例#2:
无
输入样例#3:
无
输出样例#3:
无
#include<bits/stdc++.h>
#define N 1003
using namespace std; 
int m,n,k,l,d,x[N],y[N],c[N],o[N],res[N],len=1;
int main(){
    scanf("%d%d%d%d%d",&m,&n,&k,&l,&d); 
    for(int i=1;i<=d;i++){ 
        int xi,yi,pi,qi; 
        scanf("%d%d%d%d",&xi,&yi,&pi,&qi); 
        if(xi==pi)x[min(yi,qi)]++;
        else y[min(xi,pi)]++;
    } 
    for(int i=1;i<=k;i++){
        int maxn=-1,p;
        for(int j=1;j<m;j++)
            if(y[j]>maxn){maxn=y[j];p=j;} 
        y[p]=0;c[p]++;
    } 
    for(int i=1;i<=l;i++){ 
        int maxn=-1,p;
        for(int j=1;j<n;j++)
            if(x[j]>maxn){maxn=x[j];p=j;} 
        x[p]=0;o[p]++; 
    } 
    for(int i=0;i<N;i++)if(c[i]&&i!=0)res[++len]=i;
    for(int i=1;i<len;i++)if(res[i]!=0)printf("%d ",res[i]);
    printf("%d\n",res[len]);
	for(int i=1;i<=len;i++)res[i]=0;len=1; 
    for(int i=0;i<N;i++)if(o[i]&&i!=0)res[++len]=i;
    for(int i=1;i<len;i++)if(res[i]!=0)printf("%d ",res[i]);
    printf("%d\n",res[len]);
    return 0; 
}
  1. Hanoi双塔问题(同182)

  2. 排列生成

题目描述
输入n,1<=n<=8。输出n的全排列,每一行一个排列方案,数字由空格隔开,按照字典序输出。注意行末不能有空格。
输入输出格式
输入格式
如题
输出格式
如题
输入输出样例
输入样例#1:
2
输出样例#1:
1 2
2 1
输入样例#2:
3
输出样例#2:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
输入样例#3:
无
输出样例#3:
无
#include<bits/stdc++.h>
using namespace std;
int n,x[9];
void print(){
	for(int i=0;i<n-1;i++)cout<<x[i]<<" ";
	cout<<x[n-1]<<endl;
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++)x[i]=i+1;
	do{
		print();
	}while(next_permutation(x,x+n));
	return 0;
}
  1. 起个英文名1
题目描述
王村长生了个大胖儿子需要起英文名字,关键要朗朗上口。他认为有n种音节是好听的,必须都用到一次,那么有哪些排序方式呢?
输入输出格式
输入格式
输入文件名name1.in
输入第一行为正整数n,第二行有n个小写字符串各自代表一种音节(无重复),n<=5。
输出格式
输出文件名name1.out
输出儿子的小写英文名候选方案,每一行输出一个,按照字典序输出。注意儿子一定姓王。注意行末没有空格。
输入输出样例
输入样例#1:
2
tuo ni
输出样例#1:
nituo wang
tuoni wang
输入样例#2:
3
cha li si
输出样例#2:
chalisi wang
chasili wang
lichasi wang
lisicha wang
sichali wang
silicha wang
输入样例#3:
无
输出样例#3:
无
#include<bits/stdc++.h>
using namespace std;
int n;
string s[6];
void print(){
	for(int i=0;i<n;i++)cout<<s[i];
	cout<<" wang"<<endl;
}
int main(){
	freopen("name1.in", "r", stdin);
	freopen("name1.out", "w", stdout);
	cin>>n;
	for(int i=0;i<n;i++)cin>>s[i];
	sort(s, s+n);
	do{
		print();
	}while(next_permutation(s,s+n));
	return 0;
}
  1. 罗密欧与朱丽叶
题目描述
在一个n*m格子的迷宫里,o代表空地可以行走,#代表墙体不可以通过,R代表罗密欧,J代表朱丽叶。罗密欧和朱丽叶每秒钟可以上下左右四个方 向走动一格,请问他们相遇需要至少几秒钟?如果无法相遇输出forever 。



输入输出格式
输入格式
输入文件romeo.in 输入第一行为n和m,n,m<=10。接着是n*m格的字符。
输出格式
输出文件romeo.out 输出forever或者一个浮点数,保留一位小数
输入输出样例
输入样例#1:
2 2
oJ
R#
输出样例#1:
1.0
输入样例#2:
4 5
ooo#J
o#o#o
o#o#o
R#ooo
输出样例#2:
6.5
输入样例#3:
2 2
R#
#J
输出样例#3:
forever
#include<bits/stdc++.h>
#define N 19
using namespace std;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int m,n,xR,yR,xJ,yJ,dst[N][N];
char d[N][N];
bool vst[N][N];
struct Node{
	int x,y;
};
int bfs(){
	queue<Node> q;
	vst[xR][yR]=1;
	dst[xR][yR]=0;
	q.push((Node){xR,yR});
	while(!q.empty()){
		Node now=q.front();
		q.pop();
		for(int k=0;k<4;k++){
			int nx=now.x+dx[k],ny=now.y+dy[k];
			if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&d[nx][ny]!='#'&&!vst[nx][ny]){
				vst[nx][ny]=1;
				dst[nx][ny]=dst[now.x][now.y]+1;
				q.push((Node){nx,ny});
				if(nx==xJ&&ny==yJ)return dst[nx][ny];
			}
		}
	}
	return -1;
}
int main(){
	freopen("romeo.in", "r", stdin);
	freopen("romeo.out", "w", stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	    for(int j=1;j<=m;j++){
	        cin>>d[i][j];
	        if(d[i][j]=='R')xR=i,yR=j;
	        if(d[i][j]=='J')xJ=i,yJ=j;
		}
	int res=bfs();
	if(res==-1)cout<<"forever";
	else cout<<fixed<<setprecision(1)<<res/2.0;
	return 0;
}
  1. 这不是编程题
题目描述
1.以下哪个是灰太狼的老婆  A.红太狼  B.红太阳  C.红彤彤  D.红金宝
2.以下哪个是中国古代四大美女之一  A.杨玉环  B.杨紫  C.杨颖  D.杨幂
3.在四大天王里任选两个(不计顺序),共有几种选法? 注意:这不是编程题,只是披着编程题外衣的选择/填空题。你只需要提交如下代码,并在(*)行处填入你的答案即可
#include<iostream>
#include<string>
using namespace std;
string ans[3]={"A","C","1"};    // (*)
int i;
int main() {
cin>>i;
cout<<ans[i-1]<<endl;
return 0;
}
输入输出格式
输入格式
无
输出格式
无
输入输出样例
输入样例#1:
无
输出样例#1:
无
输入样例#2:

输出样例#2:

输入样例#3:

输出样例#3:

#include<iostream> 
#include<string>
using namespace std; 
string ans[3]={"A","A","6"};
int i;
int main() {    
	cin>>i;
	cout<<ans[i-1]<<endl;
	return 0;
}
  1. 中位数
题目描述
中位数也就是中间位置的数。
有一个数组共n个元素(n为奇数),其中某个数x称为中位数,x满足如下条件: 可以将数组内除了x以外的其他n-1个数分为个数相等的 两组数字A,B。A中的数值都不大于x,B中的值都不小于x。
输入输出格式
输入格式
输入文件median.in  输入第1行是一个正奇数n。第2行n个正整数。
数据规模:
对于30%的数据,1<=n<=100
对于70%的数据,1<=n<=10000
对于100%的数据,1<=n<=100000,数组元素均不超过1000
输出格式
输出文件median.out 输出一个整数,表示中位数的值。
输入输出样例
输入样例#1:
5
1 2 3 4 5
输出样例#1:
3
输入样例#2:
5
1 2 2 4 5
输出样例#2:
2
输入样例#3:

输出样例#3:

#include<bits/stdc++.h>
using namespace std;
int main(){
	freopen("median.in", "r", stdin);
	freopen("median.out", "w", stdout);
	int n,a[100001];
	cin>>n;
	for(int i = 0; i < n; i ++)		cin>>a[i];
	sort(a, a+n);
	cout<<a[(n+1)/2-1];
	return 0;
}
  1. 面条切割
题目描述
有n根面条。每根面条可以切割开成为若干正整数长度小面条,但不能拼 接。现在要从这些面条中切割出m条长度相同的小面条,求每段小面条的 最大长度是多少。允许有剩余
输入输出格式
输入格式
输入:第一行是正整数n和m,n<=10^5,m<=10^8。第二行是n 个不超过10^6 的正整数,表示每条的长度。
输出格式
输出:切出小面条的最大长度,若无法切割,输出Failed。
输入输出样例
输入样例#1:
3 4
10 5 9
输出样例#1:
5
输入样例#2:
4 5
5 6 7 8
输出样例#2:
4
输入样例#3:
无
输出样例#3:
无
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m,x[1000008];
bool OK(ll len){
	ll cnt=0;
	for(ll i=0;i<n;i++){
		cnt+=x[i]/len;
		if(cnt>=m)return 1;
	}
	return 0;
}
int main(){
	cin>>n>>m;
	for(int i=0;i<n;i++)cin>>x[i];
	ll l=1;
	ll r=*max_element(x,x+n);
	ll ans=0;
	while(l<=r){
		ll mid=l+(r-l)/2;
		if(OK(mid))ans=mid,l=mid+1;
		else r=mid-1;
	}
	if(ans>0)cout<<ans;
	else cout<<"Failed";
	return 0;
}
  1. 鹊桥相会
题目描述
牛郎是地上的农民,织女是天上的神仙,他们相爱却不能在一起,被迫分离。传说在农历七月初七,喜鹊会在他们之间架起一座鹊桥,而他们每年也只能在鹊桥上相聚一次。因为喜鹊们体力有限,只能支撑桥面100秒,100秒后鹊桥就会坍塌。鹊桥长度为L米,牛郎的奔跑速 度为每秒u米,织女的速度为每秒v米。牛郎和织女同时从桥两头开始奔跑,最终要在桥坍塌前安全回到各自起点,那么他们最多能拥抱在一起几秒?
输入输出格式
输入格式
输入文件bridge.in  输入第一行为正整数L,u,v,均不超过1000。
输出格式
输出文件bridge.out 输出一个浮点数,保留2位小数。
输入输出样例
输入样例#1:
1000 400 100
输出样例#1:
96.00
输入样例#2:
50 4 4
输出样例#2:
87.50
输入样例#3:

输出样例#3:

#include<bits/stdc++.h>
using namespace std;
int main(){
 freopen("bridge.in", "r", stdin);
 freopen("bridge.out", "w", stdout);
 double L, u, v;
 double result;
 cin>>L>>u>>v;
 result = max(100 - L / (u + v) * 2, 0.0);
 cout<<fixed<<setprecision(2)<<result<<endl;
 return 0;
}
  1. 体育乐园
题目描述
因为数学老师总是以各种理由霸占体育课的时间来上数学课,体育老师心中积怨已久。有一天体育老师把数学老师关在“体育乐园”里,这里对体育老师来说是个乐园,有篮球足球乒乓球,但对于身体柔弱的数学老师来说简直就是监牢。乐园大门的锁需要密码才能打开,真正密码藏在一串字符串S里。作为数学课代表,你要解救数学老师。有一个道理大家都明白,体育老师因为忌恨数学所以不会用数字作为密 码,S里去除所有数字后就是真正的密码。给定S,请你求出真正的秘密。
输入输出格式
输入格式
输入文件paradise.in  输入一行包含一串字符串,长度不超过1000。

输出格式
输出文件paradise.out  输出一串字符串,代表真正密码
输入输出样例
输入样例#1:
123soc456cer7890
输出样例#1:
soccer
输入样例#2:
si33zhi44fa55da
输出样例#2:
sizhifada
输入样例#3:

输出样例#3:

#include<bits/stdc++.h>
using namespace std;
int main(){
	freopen("paradise.in", "r", stdin);
	freopen("paradise.out", "w", stdout);
	string s;
	getline(cin, s);
	for(int i = 0; i < s.size(); i++){
		if(!(s[i] <= '9' && s[i] >= '0'))
		    cout<<s[i];
	}
	return 0;
}
  1. 均分纸牌
题目描述
有 N 堆纸牌,编号分别为 1,2,…, N。每堆上有若干张。可以在任一堆上取若干张纸牌,然后移动。

移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。
现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。输出最少的移动次数,若无解输出-1。
输入输出格式
输入格式
输入文件名cards.in
输入第一行为正整数N(N 堆纸牌,1 <= N <= 100),第二行为N个正整数A1 A2 … An (N 堆纸牌,每堆纸牌初始数,l<= Ai <=10000)
输出格式
输出文件名cards.out
输出一个整数。
输入输出样例
输入样例#1:
4
9 8 17 6
输出样例#1:
3
输入样例#2:
3
6 6 6
输出样例#2:
0
输入样例#3:
无
输出样例#3:
无
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,card[105],ave,step;
int main()
{
    freopen("cards.in", "r", stdin);
    freopen("cards.out", "w", stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
        scanf("%d",&card[i]),ave+=card[i];
    ave=ave/n;
    for(int i=1;i<=n;++i)
    {
        if(ave==card[i]) continue;
        card[i+1]+=card[i]-ave,step++;
    }
    printf("%d\n",step);
    return 0;
}

标签:输出,int,700,输入输出,样例,格式,题库,输入,吴凡
来源: https://www.cnblogs.com/WindowsRegedit/p/16125105.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有