选拔赛题目代码

A题.求和

输入一个整数矩阵,计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。输入格式第一行分别为矩阵的行数 m 和列数 n(m<100,n<100),两者之间以一个空格分开。
Input:
3 3
3 4 1
3 7 1
2 0 1
Output:
15

#include<iostream>
using namespace std;
int main()
{
	int m,n;
	cin>>m>>n;
	int arr[100][100]={0};
	int sum=0;
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++)
		{
			cin>>arr[i][j];
			if(i==0||i==m-1||j==0||j==n-1){
				sum+=arr[i][j];
			}
		}
	}
	cout<<sum<<endl;
	return 0;
} 

B题.弹弹弹

在这里插入图片描述

#include<iostream>
using namespace std;
int main()
{
	double h;
	double sum=0,a;
	cin>>h;
	a=h/2.0;
	sum=h;
	for(int i=1;i<10;i++)
	{
	   sum+=2.0*a;	
	   a/=2.0;
	}
	cout<<sum<<endl;
	cout<<a<<endl;
	return 0;
}

C题.分数化小数

在这里插入图片描述

#include<iostream>
using namespace std;
int main()
{
	int a, b, n;
	cin >> a >> b >> n;
	for (int i = 0; i < n; i++) {
		a = a % b;
		a *= 10;
	}
	cout << a / b << endl;
	return 0;
}

这道题比赛时我用的数组,感觉啥情况都考虑了,还是过不了,
班上一大佬几行就解决了

D题.回文

在这里插入图片描述

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	char arr[110];
	cin>>arr;
	bool flag=true;
	int len=strlen(arr);
	for(int i=0;i<len/2;i++)
	{
		if(arr[i]!=arr[len-1-i]){
			flag=false;
		}
	}
	if(flag){
		cout<<"yes"<<endl;
	}
	else{
		cout<<"no"<<endl;
	}
	return 0;
}

E题.小孩出列

在这里插入图片描述

#include<iostream>
using namespace std;
char arr[65][20];
int main()
{
	int n, w, s;
	char ch;;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}
	cin >> w >> ch >> s;
	int count = 0;
	w = w - 2;
	while (count < n) {
		for (int i = 0; i < s; i++) {
			w = (++w) % n;
			if (arr[w][18] == '1') {
				i--;
			}
		}
		cout << arr[w] << endl;
		arr[w][18] = '1';
		count++;
	}
	return 0;
}

F题.闭区间

在这里插入图片描述

#include<iostream>
#include<cstring>
#include<string> 
int arr[10010];
using namespace std;
int main()
{
	int n;
    cin>>n;
    int min_1=99999,max_1=-12;
    for(int i=0;i<n;i++){
    	int a,b;
    	cin>>a>>b;
    	if(a<min_1){
    		min_1=a;
    	}
    	if(b>max_1){
    		max_1=b;
    	}
    	for(int j=a;j<=b;j++){
    		arr[j]=1;
    	} 
    }
    bool flag=true;
    for(int i=min_1;i<=max_1;i++)
    {
    	if(arr[i]==0){
    	    flag=false;
    	}
    }
    if(flag){
    	cout<<min_1<<" "<<max_1<<endl;
    }
    else{
    	cout<<"no"<<endl;
    }
	return 0;
} 

I题.优秀奖

在这里插入图片描述

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 10;
int arr[N];
int brr[N];
int n, m;
bool fun(int n)
{
	int l = 0;
	int r = m - 1;
	while (l <= r) {
		int mid = (l + r) >> 1;
		if (brr[mid] < n) {
			l = mid + 1;
		}
		else if (brr[mid] > n) {
			r = mid - 1;
		}
		else {
			return 1;
		}
	}
	return 0;
}
int main()
{
	cin >> n >> m;
	for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}
	for (int i = 0; i < m; i++) {
		cin >> brr[i];
	}
	sort(brr, brr + m);
	for (int i = 0; i < n; i++) {
		if (fun(arr[i])) {
			cout << arr[i] << " ";
		}
	}
	return 0;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值