概述
上海市计算机学会竞赛
//题目在这(题目 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 丙组上海市计算机学会竞赛所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复