我是靠谱客的博主 无心菠萝,最近开发中收集的这篇文章主要介绍上海市计算机学会竞赛 2022.12 丙组上海市计算机学会竞赛,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

上海市计算机学会竞赛

//题目在这(题目 2022 年 12 月)

T1 多边形的内角和

思路

直接输出内角和公式即可

代码

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

int n; 

int main() {
	cin >> n;
	cout << 180 * (n - 2) << endl; 
	return 0;
}

T2星号三角阵(二)

思路

直接每行输出i个星号

代码

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

int n; 

int main() {
	cin >> n;
	n++;
	while(n--){
		for(int  i = 1; i <= n; ++i)
			cout << "*";
		cout << endl;
	}
	return 0;
}

T3折纸

思路

可以每次减去可以减去的最多的正方形,然后宽作为下一个长,长减去宽在作为宽直到为0结束为止

代码

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

ll n , m , ans; 

int main(){
	cin >> m >> n;	
	while(1){
		ans += m / n;
		ll t = m % n;
		if(t == 0)
			break;	
		else{
			ll s = m;
			m = n;
			n = t;
		}
	
	}
	cout << ans << endl;
	return 0;
}

T4中位数(二)

思路

这题我的想法是将需要插入的中位数先带进去sort排序一下
然后通过自己模拟样例可以分析出
只需要计算出x的个数和最x左边的个数以及右面的个数
只需要x两边的值相减最小即可
若x在中左,用最右边x右边的个数减去x左边,在中右同理

代码

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll MAXN = 1e5 + 10;

ll n , a[MAXN] , x , b[MAXN] , ans;

int main(){
	cin >> n;
	for(ll i = 1; i <= n; ++i)
		cin >> a[i];
	cin >> x;
	sort(a + 1 , a + 1 + n);
	if(n % 2 == 1 && a[n / 2 + 1] == x)
		cout << 0 << endl;
	else{
		ll temp , s = 0;
		if(x > a[n])
			temp = n + 1;
		for(ll i = 1; i < n; ++i){
			if(a[i] <= x && a[i + 1] > x){
				temp = i + 1;
				break;
			}
		}
		n++;
		for(ll i = 1; i < temp; ++i)
			b[i] = a[i];
		b[temp] = x;
		for(ll i = temp; i <= n; ++i)
			b[i + 1] = a[i];
		for(ll i = 1; i <= n; ++i)
			if(b[i] == x)
				s++;
		if(n % 2 == 1 && a[n / 2 + 1] == x)
			cout << 1 << endl;
		else if(n % 2 == 0 && (a[n / 2] == x || a[n / 2 + 1] == x))
			cout << 2 << endl;
		else{
			if(temp > (n / 2))
				temp = temp - s + 1;
			ans = max(temp - 1 , n - temp) - min(temp - 1 , n - temp);
			cout << ans + 1 << endl;
		}
	}
	return 0;
}

T5等差数列

思路

先计算出每两个数之间的差值
然后每连续的数字整合为一个数组
通过公式计算出个数,为了防止出现负数需要!=1

代码

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10;

long long n , q ,  a[MAXN] , s[MAXN] , ans;

int main(){
	cin >> n;
	for(int i = 1; i <= n; ++i)
		cin >> a[i];
	for(int i = 1; i < n; ++i)
		a[i] = a[i + 1] - a[i];
	n--;
	long long temp = 1;
	for(int i = 2; i <= n; ++i){
		if(a[i] == a[i - 1])
			temp++;
		else{
			s[++q] = temp;
			temp = 1;
		}
	}
	s[++q] = temp;
	for(int i = 1; i <= q; ++i)
		if(s[i] != 1)
			ans += (s[i] - 1) * s[i] / 2;
	cout << ans << endl;
	return 0;
}

最后

以上就是无心菠萝为你收集整理的上海市计算机学会竞赛 2022.12 丙组上海市计算机学会竞赛的全部内容,希望文章能够帮你解决上海市计算机学会竞赛 2022.12 丙组上海市计算机学会竞赛所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部