2018USTC-SummerSchool-DS-TEST3

五、函数编程
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小姐姐的

先将就一下

猜你喜欢

转载自blog.csdn.net/m0_38040146/article/details/81415936
DS
今日推荐