数字加密
内存限制: 256 Mb
时间限制: 1000 ms
题目描述
对一个十进制的四位数来说,我们用以下规则将它加密成另一个四位数:
- 首先,将个位和千位对调;
- 然后,将十位和百位对调;
- 最后将每一位数字进行替换操作。替换规则为:0 替换成 9、1 替换成 8、2 替换成 7、3 替换成 6,9 替换成 0,其他数字以此类推。
例如,对 8429
加密,则
- 个位和千位对调后得
9428
; - 十位和百位对调后得
9248
; - 将每个数字替换后得
0751
。
现在给定一个已经被加密过的四位数(称之为密文),请解密出原本的数字(称之为明文)。
输入格式
单个整数,表示给定的密文,保证输入的密文有且仅有四个数字。
输出格式
单个整数,表示对应的明文。
样例数据
输入:
0751
输出:
8429
输入:
1123
输出:
6788
代码
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
string s;
int main(){
cin>>s;
for(int i=3;i>=0;i--){
cout<<9-(s[i]-48);
}
return 0;
}
3,5行:导入库并且创建字符串
8,9行:
(1).将个位和千位对调;将十位和百位对调; 其实就是倒序(for循环)
(2).互相调换的两个数字之和都为9,就用9减去那个数 9-(s[i]-48)
角谷猜想
内存限制: 256 Mb
时间限制: 1000 ms
题目描述
给定一个正整数 𝑛,若 𝑛 是偶数,将 𝑛 的值减少一半,如果 𝑛是奇数,将 𝑛 的值乘 3,再加 1。不断地重复这个操作,任何正整数最后都会变成 1。这个猜想很可能是正确的,因为借助计算机,尚未发现存在反例。
给定 𝑛,请输出用上述操作将 𝑛 变成 1 的过程。
输入格式
单个整数表示 𝑛。
输出格式
若干整数,表示用角谷变换将 𝑛 变成 1 的过程。
数据范围
2≤n≤50000
样例数据
输入:
13
输出:
40 20 10 5 16 8 4 2 1
输入:
7
输出:
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
代码
#include <iostream>
#include <cstdio>
using namespace std;
int n;
int main(){
cin>>n;
while(n!=1){
if(n%2==0) n=n/2;
else n=n*3+1;
cout<<n<<" ";
}
return 0;
}
7行:循环至n=1
8行:判断n是不是偶数,如果是,将 𝑛 的值减少一半
9行.反之,将 𝑛 的值乘 3,再加 1
10行:输出过程
闰年的判定
内存限制: 256 Mb
时间限制: 1000 ms
题目描述
给定一个正整数 𝑦 表示一个年份,请判定 𝑦 年是否为闰年,闰年分普通闰年与世纪闰年:
- 普通闰年的年份是 4的倍数,但不能是 100 的倍数;
- 世纪闰年的年份是 400 的倍数。
输入格式
单个整数:表示 𝑦y。
输出格式
- 若是闰年,输出
Leap year
; - 若不是闰年,输出
Common year
;
数据范围
- 1≤𝑦≤10000
样例数据
输入:
2020
输出:
Leap year
输入:
1900
输出:
Common year
输入:
2000
输出:
Leap year
代码
#include <iostream>
#include <cstdio>
using namespace std;
int y;
int main(){
cin>>y;
if(y%100==0){
if(y%400==0){
cout<<"Leap year"<<endl;
return 0;
}
else{
cout<<"Common year"<<endl;
return 0;
}
}
else if(y%4==0) cout<<"Leap year"<<endl;
else cout<<"Common year"<<endl;
return 0;
}
if(y%100==0)
判定是否是整百年
if(y%400==0)
判定是否可以被400整除,若可以,直接输出"Leap year"并终止程序
若不是,输出"Common year"并终止程序
else if(y%4==0)
若不是整百年,判断能否被4整除,若可以,直接输出"Leap year"
else
输出"Common year"并终止程序
多边形的判定
内存限制: 256 Mb
时间限制: 1000 ms
题目描述
给定 𝑛个整数 𝑎1,𝑎2,…,an,每个数字表示一条线段的长度,请问能否用这些线段,围成一个封闭的 𝑛 边形?
𝑛 条线段能围成 𝑛 边形的条件是:任何一条线段的长度都严格小于剩余 𝑛−1 条线段的长度之和。
输入格式
第一行:单个整数 𝑛
第二行:𝑛 个整数 𝑎1,𝑎2,…,an
输出格式
如果可以围成 𝑛 边形,输出 Yes
,否则输出 No
。
数据范围
- 1≤𝑎𝑖≤1,000,000,000
- 对于 30% 的数据,1≤𝑛≤100
- 对于 60% 的数据,1≤𝑛≤5,000
- 对于 100% 的数据,1≤𝑛≤100,000
样例数据
输入:
6
1 3 5 2 4 6
输出:
Yes
代码
#include <iostream>
#include <cstdio>
using namespace std;
long long n[100001],h,s;
int main(){
cin>>h;
for(int i=0;i<h;i++){
cin>>n[i];
s+=n[i];
}
for(int i=0;i<h;i++){
if(s-n[i]<=n[i]){
cout<<"No";
return 0;
}
}
cout<<"Yes";
return 0;
}
注意这里的变量s,这是该图形的周长
每到一条边,就用s减那条边的长度,若那条边的长度大于等于s减那条边的长度
用这些线段,不能围成一个封闭的 𝑛 边形(输出No)
反之,输出Yes