题目描述
一个
n
n
n 条边的多边形,其内角和公式为
180
×
(
n
−
2
)
180×(n−2)
180×(n−2)。给定
n
n
n,请计算并输出
n
n
n 边形的内角和。
输入格式
单个整数:表示
n
n
n。
输出格式
单个整数:表示
n
n
n 边形的内角和。
数据范围
3
≤
n
≤
100
3\leq n\leq 100
3≤n≤100
样例数据
输入:
3
输出:
180
输入:
5
输出:
540
分析:
本题就很无脑,记下数然后按他说的来做就行了
代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
long long n;
cin>>n;
cout<< 180*(n-2) << endl;
return 0;
}
题目描述
给定一个整数 nn,输出一个 nn 行 nn 列的星号三角阵,直角位于图形的左上角。例如当 n=4n=4 时,输出
****
***
**
*
输入格式
单个整数表示
n
n
n。
输出格式
共
n
n
n 行:表示一个星号三角阵。
数据范围
1
≤
n
≤
100
1\leq n\leq 100
1≤n≤100
样例数据
输入:
3
输出:
***
**
*
分析:
本题也是一样,两层for循环就行了
代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
long long n;
cin>>n;
for(int i=n;i>=0;--i){
for(int j=1;j<=i;++j){
cout<< "*";
}
cout<< endl;
}
return 0;
}
题目描述
小爱手中有一张矩形纸张,他想把这张纸分成若干正方形纸片,具体分法如下:
第11步:小爱会先确定纸张的长宽,假设短边长度为nn,长边长度为
m
m
m。
第22步:小爱会将短边沿直角平分线对折后剪去,从而得到一个
n
×
n
n \times n
n×n的方形纸片。
第33步:若还有剩余,小爱会将剩余的长宽为
n
∗
(
m
−
n
)
n*(m-n)
n∗(m−n)的纸张作为现有纸张,代入第一步后重复之前过程,直至没有之后纸张剩余为止。
请问按如上操作,小爱最终会得到几张方形纸片?
例如:一开始,小爱有一张
10
×
6
10 \times 6
10×6的纸张,按他的分割方法,最终他可以获得 4 张方形纸片,具体过程如下图所示:
输入格式
输入共两个正整数,表示初始矩形纸张的长宽
n
n
n,
m
m
m
输出格式
输出题目所求能获得的矩形个数
数据范围
对于
30
%
30 \%
30% 的数据,
1
≤
n
,
m
≤
100
1 \leq n ,m \leq 100
1≤n,m≤100
对于
60
%
60 \%
60% 的数据,
1
≤
n
,
m
≤
1
0
7
1 \leq n ,m \leq 10^7
1≤n,m≤107
对于
100
%
100 \%
100% 的数据,
1
≤
n
,
m
≤
1
0
13
1 \leq n ,m \leq 10^{13}
1≤n,m≤1013
样例数据
输入:
10 6
输出:
4
分析:本题如果照题目来的话,能拿六十分。
代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
long long n,m,ans=1;
cin>>n>>m;
while(n!=m){
if(n>m){
n-=m;
ans++;
}else if(n<m){
m-=n;
ans++;
}
}
cout<< ans << endl;
return 0;
}
后来,这题我实在不会,先鸽一下,等后面整明白了再贴
题目描述
中位数,就指将所有数字排序后,位置在最中间的数。
给定
n
n
n 个数字的序列
a
1
,
a
2
,
.
.
.
,
a
n
a_1,a_2,...,a_n
a1,a2,...,an ,以及一个期望中位数
x
x
x。小爱想知道,最少再添加多少个数字,才能使序列中包含奇数个数字,且
x
x
x 为该序列的中位数?
输入格式
输入共三行:
第一行,一个正整数
n
n
n ,表示元素个数
第二行,
n
n
n 个整数,分别表示
a
1
,
a
2
,
.
.
.
,
a
n
a_1,a_2,...,a_n
a1,a2,...,an
第三行,一个整数
x
x
x ,表示期望中位数
输出格式
输入一个整数,表示答案
数据范围
对于
30
%
30\%
30% 的数据,
1
≤
n
≤
100
1 \leq n \leq 100
1≤n≤100
对于
60
%
60\%
60% 的数据,
1
≤
n
≤
1
0
4
1 \leq n \leq 10^4
1≤n≤104
对于
100
%
100\%
100% 的数据,
1
≤
n
≤
1
0
5
1 \leq n \leq 10^5
1≤n≤105,
−
1
0
9
≤
x
,
a
i
≤
1
0
9
−10^9≤x,a_i ≤10^9
−109≤x,ai≤109
样例数据
输入:
4
6 4 7 1
3
输出:
3
说明:
加1个3 和 2个1,就可以让3成为中位数
输入:
5
1 2 3 4 5
3
输出:
0
说明:
不用添加任何数字,3已经是中位数
分析:这题我想不通,我想的是,看中位数前有几位,后有几位,然后相差的就是补的,然后特判一下,但是九十分,玄学问题,想不通
代码:
#include <bits/stdc++.h>
using namespace std;
const long long MAXN=1e5+10;
long long a[MAXN],n,x;
int main(){
cin>>n;
for(int i=1;i<=n;++i){
cin>>a[i];
}
cin>>x;
bool f=true;
for(int i=1;i<=n;++i){
if(a[i]==x){
f=false;
}
}
long long ans=0,x1=0,y1=0,id=0;
if(f==true){
a[++n]=x;
ans++;
}
sort(a+1,a+n+1);
if(n%2==1){
if(a[n/2+1]!=x){
for(int i=1;i<=n;++i){
if(a[i]==x){
id=i;
break;
}
}
x1=id-1;
y1=n-id;
ans+=abs(x1-y1);
}
}else{
for(int i=1;i<=n;++i){
if(a[i]==x){
id=i;
break;
}
}
x1=id-1;
y1=n-id;
ans+=abs(x1-y1);
}
cout<< ans << endl;
return 0;
}
题目描述
等差数列 指从第二项起,每一项与它的前一项的差等于同一个常数的一种数列,且这个常数叫做等差数列的公差。
例如:数列 1 5 9 13 就是一个公差为 4 的等差数列。
现给定一个长度为
n
n
n 的序列
a
1
,
a
2
,
.
.
.
,
a
n
a_1,a_2,...,a_n
a1,a2,...,an ,请问该序列中,有多少个长度不小于 3 的子段满足等差数列?
输入格式
输入共两行:
第一行,一个正整数
n
n
n,表示给定序列长度
第二行,
n
n
n 个整数,分别表示序列的每一项
a
1
,
a
2
,
.
.
.
,
a
n
a_1,a_2,...,a_n
a1,a2,...,an
输出格式
输出一个整数,表示满足条件的子段个数。
数据范围
对于
30
%
30\%
30%的数据,
1
≤
n
≤
100
1 \leq n \leq 100
1≤n≤100
对于
60
%
60\%
60% 的数据,
1
≤
n
≤
1
0
4
1 \leq n \leq 10^4
1≤n≤104
对于
100
%
100\%
100% 的数据,
1
≤
n
≤
1
0
5
1 \leq n \leq 10^5
1≤n≤105 ,
−
1
0
9
≤
a
i
≤
1
0
9
-10^9 \leq a_i \leq 10^9
−109≤ai≤109
样例数据
输入:
10
-1 1 3 3 3 2 3 2 1 0
输出:
5
说明:
区间[1,3],[3,5],[7,10],[7,9],[8,10]均满足等差数列要求
分析:这题我没有好思路,就是硬推出来的30分
代码:
#include <bits/stdc++.h>
using namespace std;
long long a[100010],n,cnt=0;
int main(){
cin>>n;
for(int i=1;i<=n;++i){
cin>>a[i];
}
long long ans=0;
for(int i=3;i<=n;++i){
for(int j=1;j<=n-i+1;++j){
ans=abs(a[j]-a[j+1]);
bool f=true;
for(int x=1;x<i;++x){
if(abs(a[j+x-1]-a[j+x])!=ans){
f=false;
}
if(a[j]-a[j+1]>=0&&a[j+x-1]-a[j+x]<0||a[j]-a[j+1]<0&&a[j+x-1]-a[j+x]>=0){
f=false;
}
}
if(f==true){
cnt++;
}
}
}
cout<< cnt << endl;
return 0;
}