《程序设计基础(B)Ⅰ》 实验5 6 难度较大题目记录

温馨提示:本文最后修改于 321 天前,部分内容可能已经过时。如文章内容或静态资源失效,请联系我进行更新,谢谢~
周四又要机测了,555,QAQ

12月6日晚更新: 为什么每次都有小问题就差一点...give me a reason... 期末考试不全Accept我大年三十肝c语言!

C/C++程序训练6---歌德巴赫猜想的证明
Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description
验证“每个不小于6的偶数都是两个素数之和”,输入一个不小于6的偶数n,找出两个素数,使它们的和为n。

Input
输入一个不小于6的偶数n。

Output
找出两个素数,使它们的和为n。只需要输出其中第一个素数最小的一组数据即可。

Sample Input
80
Sample Output
80=7+73

#include<stdio.h>
int f(int n)
{
    int i,flag=1;
    for (i=2;i<n;i++)
    {
        if (n%i==0) flag=0;
    }
    if (n==1) flag=0;
    return flag;
}
int main()
{
    int n,i,a,b;
    scanf("%d",&n);
    for (i=2;i<n-1;i++)
    {
        a=f(i);
        b=f(n-i);
        if (a==1&&b==1)
        {
            printf("%d=%d+%d",n,i,n-i);
            break;
        }
    }
}


排序问题
Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description
输入10个整数,将它们从小到大排序后输出,并给出现在每个元素在原来序列中的位置。
Input
输入数据有一行,包含10个整数,用空格分开。
Output
输出数据有两行,第一行为排序后的序列,第二行为排序后各个元素在原来序列中的位置。
Sample Input
1 2 3 5 4 6 8 9 10 7
Sample Output
1 2 3 4 5 6 7 8 9 10
1 2 3 5 4 6 10 7 8 9

#include<stdio.h>
int main()
{
    int x[10]={0},n[10]={0};
    int i,j,k,temp1,temp2;
    for (i=0,k=1;i<10;i++,k++)
    {
        scanf("%d",&x[i]);
        n[i]=k;
    }
    for (i=0;i<9;i++)
    {
       for (j=i+1;j<10;j++)
       {
           if (x[i]>x[j])
           {
               temp1=x[i];
               x[i]=x[j];
               x[j]=temp1;
               temp2=n[i];
               n[i]=n[j];
               n[j]=temp2;
           }
       }
    }
    for (i=0;i<10;i++)
    {
        if (i==9) printf("%d\n",x[i]);
        else printf("%d ",x[i]);
    }
    for (i=0;i<10;i++)
    {
        if (i==9) printf("%d\n",n[i]);
        else printf("%d ",n[i]);
    }
    return 0;
}

矩阵输出
Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description
输入n个整数,输出由这些整数组成的n行矩阵。

Input
第一行输入一个正整数N(N<=20),表示后面要输入的整数个数。
下面依次输入N个整数。

Output
以输入的整数为基础,输出有规律的n行数据。

Sample Input
5
3 6 2 5 8
Sample Output
3 6 2 5 8
8 3 6 2 5
5 8 3 6 2
2 5 8 3 6
6 2 5 8 3

#include<stdio.h>
int main()
{
    int n,i,j,temp,n1;
    int x[20];
    scanf("%d",&n);
    for (i=0;i<n;i++)
    {
        scanf("%d",&x[i]);
    }
    for (i=0;i<n;i++)
    {
        if (i==n-1) printf("%d\n",x[i]);
        else printf("%d ",x[i]);
    }
    n1=n-1;
    while(n1--)
    {
        temp=x[n-1];
        for (i=n-2;i>=0;i--)
        {
            x[i+1]=x[i];
        }
        x[0]=temp;
        for (i=0;i<n;i++)
        {
            if (i==n-1) printf("%d\n",x[i]);
            else printf("%d ",x[i]);
        }
    }
    return 0;
}

C语言实验——数组逆序
Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description
有n个整数,使其最后m个数变成最前面的m个数,其他各数顺序向后移m(m < n < 100)个位置。
Input
输入数据有2行,第一行的第一个数为n,后面是n个整数,第二行整数m。
Output
按先后顺序输出n个整数。
Sample Input
5 1 2 3 4 5
2
Sample Output
4 5 1 2 3

#include<stdio.h>
int main()
{
    int n,x[100],m,i,temp;
    scanf("%d",&n);
    for (i=0;i<n;i++)
    {
        scanf("%d",&x[i]);
    }
    scanf("%d",&m);
    while (m--)
    {
        temp=x[n-1];
        for (i=n-2;i>=0;i--)
        {
            x[i+1]=x[i];
        }
        x[0]=temp;
    }
    for (i=0;i<n;i++)
    {
        if (i==n-1) printf("%d\n",x[i]);
        else printf("%d ",x[i]);
    }
    return 0;
}

C语言实验——各位数字之和排序
Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description
给定n个正整数,根据各位数字之和从小到大进行排序。
Input
输入数据有多组,每组数据占一行,每行的第一个数正整数n,表示整数个数,后面接n个正整数。当n为0时,不作任何处理,输入结束。n<=10
Output
输出每组排序的结果。
Sample Input
2 1 2
3 121 10 111
0
Sample Output
1 2
10 111 121

#include<stdio.h>
int main()
{
    int n,i,j,k,temp,x[10],sum[10];
    while (scanf("%d",&n)!=EOF&&n!=0)
    {
        for (i=0;i<n;i++)
        {
            x[i]=0;
            sum[i]=0;
        }
        for (i=0;i<n;i++)
        {
            scanf("%d",&x[i]);
        }
        for (i=0;i<n;i++)
        {
            temp=x[i];
            while (temp!=0)
            {
                sum[i]=sum[i]+temp%10;
                temp=temp/10;
            }
        }
        for (i=0;i<n-1;i++)
        {
            for (j=i+1;j<n;j++)
            {
                if (sum[j]<sum[i])
                {
                    temp=x[i];
                    x[i]=x[j];
                    x[j]=temp;
                    temp=sum[i];
                    sum[i]=sum[j];
                    sum[j]=temp;
                }
            }
        }
        for (i=0;i<n;i++)
        {
            if (i==n-1) printf("%d\n",x[i]);
            else printf("%d ",x[i]);
        }
    }
    return 0;
}

C语言实验——计算表达式
Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description
计算下列表达式值:
嘤嘤嘤!
Input
输入x和n的值,其中x为非负实数,n为正整数。
Output
输出f(x,n),保留2位小数。
Sample Input
3 2
Sample Output
2.00

#include<stdio.h>
#include<math.h>
double f(double x,int n);
double f(double x,int n)
{
    int i;
    double sum=0;
    for (i=1;i<=n;i++)
    {
        if (i==1) sum+=sqrt(i+x);
        else sum=sqrt(i+sum);
    }
    return sum;
}
int main()
{
    int x,n;
    double ans;
    scanf("%d %d",&x,&n);
    ans=f(x,n);
    printf("%.2lf\n",ans);
    return 0;
}

众数
Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description
众数是指在一组数据中,出现次数最多的数。例如:1, 1, 3 中出现次数最多的数为 1,则众数为 1。
给定一组数,你能求出众数吗?

Input
输入数据有多组(数据组数不超过 50),到 EOF 结束。
对于每组数据:
第 1 行输入一个整数 n (1 <= n <= 10000),表示数的个数。
第 2 行输入 n 个用空格隔开的整数 Ai (0 <= Ai <= 1000),依次表示每一个数。

Output
对于每组数据,在一行中输出一个整数,表示这组数据的众数。
数据保证有唯一的众数。

Sample Input
3
1 1 3
5
0 2 3 1 2
Sample Output
1
2

#include<stdio.h>
int main()
{
    int n,i,ans,max;
    while (scanf("%d",&n)!=EOF)
    {
        int x[10000]={0},count[1001]={0};
        for (i=0;i<n;i++)
        {
            scanf("%d",&x[i]);
            count[x[i]]++;
        }
        max=count[x[0]];
        ans=x[0];
        for (i=1;i<n;i++)
        {
            if (max<count[x[i]])
            {
                max=count[x[i]];
                ans=x[i];
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}

C语言实验——数日子
Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description
光阴似箭,日月如梭,大学的时间真是宝贵,要抓紧时间AC^_^。你知道今天是这一年第几天吗,掐指一算还是要算好久,呵呵还是让计算机来做吧。这里的问题就是让你来写一个程序,输入某年某月某日,判断这一天是这一年的第几天?

Input
输入第一行是数据的组数n<100,下面n行是n组数据,每组数据由3个正整数组成,分别为年、月、日,我们保证每组数据都是有效的日期。

Output
输出所输入的日期是这一年的第几天。

Sample Input
2
2009 1 1
2008 1 3
Sample Output
1
3

#include<stdio.h>
int main()
{
    int month[12] = {31,0,31,30,31,30,31,31,30,31,30,31};
    int y,m,d,day,n,i;
    scanf("%d",&n);
    while(n--)
    {
        day = 0;
        scanf("%d %d %d",&y,&m,&d);
        if((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0))
            month[1] = 29;//闰年2月29天
        else
            month[1] = 28;//平年2月28天
        for(i = 0; i < m - 1; i++)
        {
            day += month[i];
        }
        printf("%d\n",day + d);
    }
    return 0;
}

矩阵输出
Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description
输入n个整数,输出由这些整数组成的n行矩阵。

Input
第一行输入一个正整数N(N<=20),表示后面要输入的整数个数。
下面依次输入N个整数。

Output
以输入的整数为基础,输出有规律的n行数据。

Sample Input
5
3 6 2 5 8
Sample Output
3 6 2 5 8
8 3 6 2 5
5 8 3 6 2
2 5 8 3 6
6 2 5 8 3

#include<stdio.h>
int main()
{
    int n,i,j,temp,n1;
    int x[20];
    scanf("%d",&n);
    for (i=0;i<n;i++)
    {
        scanf("%d",&x[i]);
    }
    for (i=0;i<n;i++)
    {
        if (i==n-1) printf("%d\n",x[i]);
        else printf("%d ",x[i]);
    }
    n1=n-1;
    while(n1--)
    {
        temp=x[n-1];
        for (i=n-2;i>=0;i--)
        {
            x[i+1]=x[i];
        }
        x[0]=temp;
        for (i=0;i<n;i++)
        {
            if (i==n-1) printf("%d\n",x[i]);
            else printf("%d ",x[i]);
        }
    }
    return 0;
}
~~End Of File~~

本文永久链接:https://blog.xmgspace.me/archives/sdut-experiments-c-1-56.html

本文文章标题:《程序设计基础(B)Ⅰ》 实验5 6 难度较大题目记录

本站欢迎转载与引用~但您需要注明文章标题与链接,并表明转载/引用自Xiaomage's Blog。

授权协议:署名-非商业性使用-相同方式共享 4.0 国际(CC BY 4.0)

标签:C语言学习

还没有人评论哦,还不快抢沙发~

添加新评论

i_f01.pngi_f02.pngi_f03.pngi_f04.pngi_f05.pngi_f06.pngi_f07.pngi_f08.pngi_f09.pngi_f10.pngi_f11.pngi_f12.pngi_f13.pngi_f14.pngi_f15.pngi_f16.pngi_f17.pngi_f18.pngi_f19.pngi_f20.pngi_f21.pngi_f22.pngi_f23.pngi_f24.pngi_f25.pngi_f26.pngi_f27.pngi_f28.pngi_f29.pngi_f30.pngi_f31.pngi_f32.pngi_f33.png