五、函数编程
501 两个相差为2的素数称为素数对,如5和7,17和19等,编程找出所有两个数均不大于n的素数对,n由键盘输入。
502分解因数。给出一个正整数a,要求分解成若干个正整数的乘积,a = a1 * a2 * ... * an,并且1 < a1 <= a2 <= a3 <= ... <= an,这样的分解的种数有多少? 如输入2,输出1;输入20,输出4.
六、线性数据结构编程
601.输入整型元素序列,利用插入算法建立一个非递减有序表。然后把表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。
602.约瑟夫环问题。有n个人围坐一圈,现从某个人开始报数,数到M的人出列,接着从出列的下一个人开始重新报数,数到M的人又出列,
如此下去,直到所有人都出列为止。试设计确定他们出列次序的程序。
第一题 素数对
两个相差为2的素数称为素数对,如5和7,17和19等,编程找出所有两个数均不大于n的素数对,n由键盘输入。
#include <iostream>
using namespace std;
int IsPrime(int x){
if(x==2)
return 1;
else if(x<=1)
return 0;
else
for(int i=2;i<=x/2;i++)
if(x%i==0)
return 0;
return 1;
}
int main()
{
int n;
printf("Please enter n:\n");
while(scanf("%d",&n)!=EOF){
for(int i=2;i<=n;i++){
if(IsPrime(i)){
if(IsPrime(i-2))
{
printf("%d\t%d\n",i-2,i);
}
}
}
}
return 0;
}
第二题 分解因数
分解因数。给出一个正整数a,要求分解成若干个正整数的乘积,a = a1 * a2 * ... * an,并且1 < a1 <= a2 <= a3 <= ... <= an,这样的分解的种数有多少? 如输入2,输出1;输入20,输出4.
#include <iostream>
using namespace std;
int sum;
void workout(int a,int b)
{
for(int i=a;i<b;i++)
{
if(b%i==0 && i<=b/i)
{
sum++;
workout(i,b/i);
}
if(i>b/i) break;
}
}0
0i.nt main()
{
int n;
printf("Please enter n:\n");
while(scanf("%d",&n)!=EOF)
{
sum=1;
workout(2,n);
printf("%d ",sum);
}
return 0;
}
递归还没怎么会,代码是copy别人的
第三题 奇偶排序
输入整型元素序列,利用插入算法建立一个非递减有序表。然后把表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
int a[1000],a1[1000],a2[500],n,i=0,j=0,k=0;
printf("Please enter n:\n");//将一串数字输入到数组中
while(scanf("%d",&n)!=EOF){
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
//排列数组
sort(a,a+n);
int len=i;
//将奇数偶数分别存储到a1,a2数组中
for(int i=0;i<len;i++){
if(a[i]%2==1)
a1[j++]=a[i];
else
a2[k++]=a[i];
}
//将数组a2插入到a1后面
for(i=j;i<len;i++)
{
a1[i]=a2[i-j];
}
for(int i=0;i<len;i++){
printf("%d ",a1[i]);
}
}
return 0;
}
第四题 约瑟夫环
约瑟夫环问题。有n个人围坐一圈,现从某个人开始报数,数到M的人出列,接着从出列的下一个人开始重新报数,数到M的人又出列,
如此下去,直到所有人都出列为止。试设计确定他们出列次序的程序。
网上搜了好几篇博客也没怎么看懂,脑袋总是缺根筋,今天不看了,明天补上。而且明天还有航母要造,好慌好慌,我的一头秀发啊》》》》》
今天尝试着看了一下,倒是有一点头绪了,看的文章是:
https://blog.csdn.net/byn12345/article/details/79487253
代码直接copy小姐姐的
先将就一下