SDUT-PTA-实验五1~10T(自存)

7-1 sdut- C语言实验—最值

有一个长度为n的整数序列,其中最大值和最小值不会出现在序列的第一和最后一个位置。
请写一个程序,把序列中的最小值与第一个数交换,最大值与最后一个数交换。输出转换好的序列。

输入格式:

输入包括两行。
第一行为正整数n(1≤n≤10)。
第二行为n个正整数组成的序列。

输出格式:

输出转换好的序列。数据之间用空格隔开。

#include<stdio.h>                            
int main()
{
    int n,a[10],i;
    int min,max;      
    scanf("%d\n",&n);
    for(int i=0;i<n;i++){
        scanf("%d ",&a[i]);}
        min=0;
        max=0;
    for(int i=1;i<n;i++){
         if(a[i]>a[max]){
             max=i;
           }
        if(a[i]<a[min]){
             min=i;
            }
     }
    int t;
    t=a[0];a[0]=a[min];a[min]=t;
    t=a[n-1];a[n-1]=a[max];a[max]=t;
    for(int i=0;i<=n-1;i++){
        if(i==n-1)printf("%d",a[i]);
        else printf("%d ",a[i]);
    }
    return 0;
}

7-2 sdut-C语言实验-整数位

输入一个不多于5位的正整数,要求:
(1)求出它是几位数;
(2)分别输出每一位数字;
(3)按逆序输出各位数字。

输入格式:

输入一个不多于5位的正整数。

输出格式:

输出数据有3行,第一行为正整数位数,第二行为各位数字,第三行为逆序的各位数字

#include<stdio.h>
#define n 5
int main()
{
    int num,a[n],i,j;
    scanf("%d",&num);
    for(i=0;i<n&&num>0;i++)
    {a[i]=num%10;num/=10;}
    
    printf("%d\n",i);
    for(j=i-1;j>=0;j--){
        if(j==i-1)printf("%d",a[j]);
        else printf(" %d",a[j]);}
    
    printf("\n");
    for(j=0;j<=i-1;j++){
        if(j==i-1)printf("%d",a[j]);
        else printf("%d ",a[j]);}
    
    return 0;
}

7-3 sdut-C语言实验-区间之和

给定一个由 n 个整数组成的序列A1,A2,……, An 和两个整数L,R,你的任务是写一个程序来计算序列号在L,R 这段位置区间内所有数的总和。

输入格式:

输入只有一组测试数据:

测试数据的第一行为一个整数 n (1< n < 10000);

第二行为 n 个 int 类型的整数;

第三行为两个整数 L,R(0 < L < R <= n)。

输出格式:

输出序列号在区间[L,R]内所有数的和,数据保证和在 int 类型范围内。

#include<stdio.h>
int main()
{
   int n,a[10000],l,r;
    int sum=0;
    scanf("%d\n",&n);
    for(int i=0;i<n;i++){
        if(i==n-1)scanf("%d\n",&a[i]);
        else scanf("%d ",&a[i]);
    }
    scanf("%d %d",&l,&r);
     for(int i=l-1;i<=r-1;i++){
       sum+=a[i];
    }
    printf("%d",sum);
    return 0;
}

7-4 sdut-C语言实验-分割整数

从键盘输入一个长整数(不超过10位),从高位开始逐位分割并输出。

输入格式:

正整数n,不含前导零。

输出格式:

分割的整数序列,各整数之间用空格格开。
注意,最后一个数字后面没有空格

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

7-5 sdut-C语言实验-众数

众数是指在一组数据中,出现次数最多的数。例如:1, 1, 3 中出现次数最多的数为 1,则众数为 1。

给定一组数,你能求出众数吗?

输入格式:

输入数据有多组(数据组数不超过 50),到 EOF 结束。

对于每组数据:

第 1 行输入一个整数 n (1 <= n <= 10000),表示数的个数。
第 2 行输入 n 个用空格隔开的整数 Ai (0 <= Ai <= 1000),依次表示每一个数。

输出格式:

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

数据保证有唯一的众数。

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

7-6 sdut- C语言实验-数日子

时间如白驹过隙,大一的时光也是转眼就结束,因此要抓住每一寸光阴提升自己。你知道今天是这一年第几天吗,掐指一算还是要算好久,呵呵还是让计算机来做吧。这里的问题就是让你来写一个程序,输入某年某月某日,判断这一天是这一年的第几天?

输入格式:

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

输出格式:

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

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n;
    int i,j;
    int a,b,c;
    int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    scanf("%d\n",&n);
    for(int i=0;i<n;i++){
        int days=0;
        scanf("%d%d%d",&a,&b,&c);
        if((a%4==0&&a%100!=0)||(a%400==0))month[1]=29;
        else month[1]=28;
       for(int j=0;j<b-1;j++){
           days+=month[j];
       }
        printf("%d\n",days+c);
        
    }
    return 0;
}

7-7 去掉重复的数据

在一大堆数据中找出重复的是一件经常要做的事情。现在,我们要处理许多整数,在这些整数中,可能存在重复的数据。

你要写一个程序来做这件事情,读入数据,检查是否有重复的数据。如果有,去掉所有重复的数字。最后按照输入顺序输出没有重复数字的数据。所有重复的数字只保留第一次出现的那份。

输入格式:

你的程序首先会读到一个正整数 n,1≤n≤100000。
然后是 n 个整数,这些整数的范围是 [1, 100000]。

输出格式:

在一行中按照输入顺序输出去除重复之后的数据。每两个数据之间有一个空格,行首尾不得有多余空格。

#include<stdio.h>
int main()
{
   int i=1,x[100001]={0},a,n;
    scanf("%d",&n);
    scanf("%d",&a);
    printf("%d",a);
    x[a]++;
    while(i<n){
        scanf("%d",&a);
        if(x[a]==0){
            printf(" %d",a);
            x[a]++;
        }
        i++;
    }
    printf("\n");
    return 0;
}

7-8 求一批整数中出现最多的个位数字

给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。

输入格式:

输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。

输出格式:

在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。

#include<stdio.h>
int main()
{
   int a[1001],cnt[10];int n,i,max;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    for(int i=0;i<n;i++){
        if(a[i]==0)cnt[0]++;
        else {
            while(a[i]>0){
               int x=a[i]%10;
                cnt[x]++;
                a[i]/=10;
            }
        }
    }
     max=cnt[0];
    for(int i=1;i<10;i++){
       
        if(max<cnt[i])max=cnt[i];
    }
    printf("%d:",max);
    for(int i=0;i<10;i++){
        if(max==cnt[i])printf(" %d",i);
    }
    return 0;
}

7-9 sdut-C语言实验- 排序

给你N(N<=100)个数,请你按照从小到大的顺序输出。

输入格式:

输入数据第一行是一个正整数N,第二行有N个整数。

输出格式:

输出一行,从小到大输出这N个数,中间用空格隔开。

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

7-10 sdut-C语言实验-排序问题

输入10个整数,将它们从小到大排序后输出,并给出现在每个元素在原来序列中的位置。

输入格式:

输入数据有一行,包含10个整数,用空格分开。

输出格式:

输出数据有两行,第一行为排序后的序列,第二行为排序后各个元素在原来序列中的位置。

#include <stdio.h>
#include <math.h>
int a[15],cnt[15];
int main()
{
int n;n=10;
for(int i=0;i<n;i++){
   scanf("%d",&a[i]);
}
for(int i=0;i<n;i++)
 cnt[i]=i+1;
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
t=cnt[j];
cnt[j]=cnt[j+1];
cnt[j+1]=t;
}
}
}
for(int i=0;i<n;i++)
if(i==0)
printf("%d",a[i]);
else
printf(" %d",a[i]);
printf("\n");
for(int i=0;i<n;i++)
{
if(i==0)
printf("%d",cnt[i]);
else
printf(" %d",cnt[i]);
}
    return 0;
}

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值