SDUT ACM OJ 实验五 一维数组

A - C语言实验——最值

#include<stdio.h>
#define N 10
int main()
{
    int i,a[N],n,t1,t2,x,y,max=-1,min=1000000;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
     scanf("%d",&a[i]);
     if(a[i]>max) {max=a[i];x=i;}
     else if(a[i]<min)   {min=a[i];y=i;}
    } 
    t1=a[1];a[1]=min;a[y]=t1;
    t2=a[n];a[n]=max;a[x]=t2;
    for(i=1;i<=n;i++)
    {
      if(i==1)
      printf("%d",a[i]);
      else
      printf(" %d",a[i]);
    }
}

B - C语言实验——整数位

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

C - 小鑫数数儿

#include <stdio.h>
int main()
{
    int a[15];
    int ave,n,i,s,d,b,c;
    while(scanf("%d",&n)!=EOF)
    {
        s=0;
        for(i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            s+=a[i];
        }
     ave=s/n;
     d=0,b=0,c=0;
     for(i=1;i<=n;i++)
     {
        if(a[i]<ave)      d++;
        else if(a[i]==ave) b++;
        else if(a[i]>ave) c++;
     }
    printf("%d %d %d\n",d,b,c);
    }
}

D - 区间之和

#include <stdio.h>
int main()
{
    int n,a[100000],i,j=0,l,r;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    scanf("%d %d",&l,&r);
    for(i=l;i<=r;i++)
    {
        j+=a[i];
    }
    printf("%d",j);
}

E - C语言实验——分割整数

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

F - 众数

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

G - 小鑫爱运动

#include<stdio.h>
int main()
{
    int n,a[11],i,j;
    while(~scanf("%d",&n))
    {
       j=1;
       for(i=1;i<=n;i++)
        {
          scanf("%d",&a[i]);
        }
        for(i=2;i<=n;i++)
        {
          if(a[i]<a[1])
           j++;
        }
        printf("%d\n",j);
    }
}

H - C语言实验——数日子

#include <stdio.h>
int main()
{
    int a[13],n,y,r,i,j,x,c=0,e=0;
    scanf("%d",&x);
    a[1]=31;a[2]=0;a[3]=31;a[4]=30;a[5]=31;a[6]=30;
    a[7]=31;a[8]=31;a[9]=30;a[10]=31;a[11]=31;a[12]=31;
    for(i=1;i<=x;i++)
    {
        scanf("%d %d %d",&n,&y,&r);
        if(n%4==0&&n%100!=0||n%400==0) e=29;
        else e=28;
        for(j=1;j<y;j++)
        {
            if(y==1) {goto A;}
            else if(y==2) {c+=a[j];goto A;}
            else if(y!=1&&y!=2) {c+=a[j];}
            if(y>2&&j==y-1) c+=e;
        }
    A:printf("%d\n",c+r);
    c=0;
    }
}

I - 喵帕斯之平地摔

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

J - 排序

#include <stdio.h>
int main()
{
    int n,i,j,a[101],t;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=n;i>0;i--)   //鸡尾酒排序
    {
        for(j=1;j<i;j++)
        {
            if(a[j]>a[j+1])
            {t=a[j];a[j]=a[j+1];a[j+1]=t;}
        }
    }
    for(i=1;i<=n;i++)
    {
        if(i==1)
        printf("%d",a[i]);
        else
        printf(" %d",a[i]);
    }
    return 0;
}

K - 排序问题

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

L - 数列有序!

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

M - 中位数

#include <stdio.h>
int main()
{
    int n,i,j,x,y,z;
    double a[102],t;
    while(~scanf("%d",&n))
    {
        t=0,x=0,y=0,z=0;
        for(i=1;i<=n;i++)
        {scanf("%lf",&a[i]);}
        for(i=n;i>0;i--)
        {
            for(j=1;j<i;j++)
            {
                if(a[j]>a[j+1])
                {t=a[j];a[j]=a[j+1];a[j+1]=t;}
            }
            t=0;
        }
        if(n%2==0){x=n/2,y=n/2+1,printf("%.1lf\n",(a[x]+a[y])/2);}
        else      {z=(n+1)/2,printf("%.1lf\n",a[z]);}
        
    }
}

N - C语言实验——各位数字之和排序

#include <stdio.h>
int main()
{
    int n,i,j,a[11],b[11],c,d,e,t;
    while(scanf("%d",&n)!=EOF&&n)
    {
        for(i=1;i<=n;i++)
        {
            d=0;
            scanf("%d",&b[i]);
            e=b[i];
            while(e>0)
            {
                c=e%10;
                e=e/10;
                d+=c;
            }
        a[i]=d;
        }
        for(i=n;i>0;i--)
        {
            for(j=1;j<i;j++)
            {
                if(a[j]>a[j+1])
                  {
                      t=a[j];a[j]=a[j+1];a[j+1]=t;
                      t=b[j];b[j]=b[j+1];b[j+1]=t;
                  }
            }
        }
        for(i=1;i<=n;i++)
        {
            if(i<n) printf("%d ",b[i]);
            else     printf("%d\n",b[i]);
        }
    }
}

O - 期末考试之排名次

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

P - 次大和次小

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

Q - 冒泡排序中数据交换的次数

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

R - 小金追呀追不上妹子

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

S - C语言实验——数组逆序

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

T - 矩阵输出

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

不懂得可以私信我,随时解答。
程序有错误请私信我,以及时改正。感谢!

最后再给大家介绍一种相对简单的排序方法:

int cmp(const void * a,const void *b)  //先定义函数
{
	return * (int * )a-* (int *)b;  //a-b是升序,反之降序
}


qsort(array,n,sizeof(int),cmp);   //排序  括号里先后顺序:数组名
 								  //数组长度  单位数组长度 定义函数名

你可能感兴趣的:(acm,数据结构,c语言,c++,排序算法)