2021高级语言期末复习训练总结5.31-6.1

6.1

A 验证哥德巴赫猜想

哥德巴赫猜想之一是指一个偶数(2除外)可以拆分为两个素数之和。请验证这个猜想。
因为同一个偶数可能可以拆分为不同的素数对之和,这里要求结果素数对彼此最接近。

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入1个偶数n(6≤n≤10000)。

输出格式:

对于每组测试,输出两个彼此最接近的素数a、b(a≤b),两个素数之间留1个空格。

输入样例:

2
30
40

输出样例:

13 17
17 23

思路总结:通过i与n-i同时满足素数条件,实现哥德巴赫猜想。注意素数判定函数。对小于2特判  

从2到sqrt(n)(等于)循环判断。主函数从n/2到>=2,i--。如果是的话,输出且跳出循环break.

#include<bits/stdc++.h>
using namespace std;
bool ss(int n){
	if(n<2)return false;
	for(int i=2;i<=sqrt(n);i++){//2到sqrt(n),例如9是3的倍数 
		if(n%i==0)return false;
	}
	return true;
} 
int main() {
    int T;
	cin>>T;
	while(T--){
		int n;
		cin>>n;
		bool flag=false;
		for(int i=n/2;i>=2;i--){//从n/2开始,到最小素数2,减减 
			if(ss(i)==true&&ss(n-i)==true){//通过i为素数,n-i 为true来判定 
			cout<<i<<" "<<n-i<<endl;
			break;	 
			}
		}
	} 
    return 0;
}

辗转相除求最小公倍数先/再*

B 母牛问题

设想一头小母牛从第4个年头开始每年生育一头小母牛。现有一头小母牛,按照此设想,第n年时有多少头母牛?

输入格式:

测试数据有多组,处理到文件尾。每组测试输入一个正整数n(1≤n≤40)。

输出格式:

对于每组测试,输出第n年时的母牛总数。

输入样例:

5
8
15

输出样例:

3
9
129

第1.2.3年为1

后面每年为n-1加n-3年。

#include<bits/stdc++.h>
using namespace std;
int f(int n){
	if(n<=3)return 1;
	return f(n-1)+f(n-3);
}
int main() {
    int n;
    while(cin>>n){
    	cout<<f(n)<<endl;
	}
    return 0;
}

 C 按长度排序

输入一个整数N及N个整数,要求对给定的N个整数进行排序:先按长度排(短的在前),如长度一样则按大小排(小的在前)。

输入格式:

测试数据有多组。每组测试数据的第一行输入一个整数N(0<N<100),接下来的N行每行输入一个非负整数(最多可达80位)。当N等于0时,输入结束。

输出格式:

对于每组测试,输出排序后的结果,每个数据占一行。每两组测试数据之间留一个空行。

输入样例:

3
123
12
3333
5
1111
2012123123123123122133333
1000
333333333
12
0

输出样例:

12
123
3333

12
1000
1111
333333333
2012123123123123122133333

本题是一个cmp的比较,长度不同,从小到大(string)

相同,数值从小到大。

采用计数器的方式保证每两个组数之间一个空行 。

采用while(true )实现处理到特殊值结束 

#include<bits/stdc++.h>
using namespace std;
bool 
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值