C++刷题(小白必看)

数字加密

内存限制: 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

Goodbye!

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值