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