2025级SYUCT-ACM新生第五次训练 题解
A. 排序1
直接冒泡即可,注意double t
#include<stdio.h>doublea[1010];intmain(){intn;scanf("%d",&n);for(inti=0;i<n;i++){scanf("%lf",&a[i]);}for(inti=0;i<n-1;i++){for(intj=0;j<n-1-i;j++){if(a[j]>a[j+1]){doublet=a[j];a[j]=a[j+1];a[j+1]=t;}}}for(inti=0;i<n;i++){printf("%.2lf ",a[i]);}printf("\n");return0;}B.排序2
直接冒泡即可,注意用getchar()吃掉多余的空格和换行
#include<stdio.h>chara[1010];intmain(){intn;scanf("%d",&n);getchar();for(inti=0;i<n;i++){scanf("%c",&a[i]);getchar();}for(inti=0;i<n-1;i++){for(intj=0;j<n-1-i;j++){if(a[j]>a[j+1]){chart=a[j];a[j]=a[j+1];a[j+1]=t;}}}for(inti=0;i<n;i++){printf("%c ",a[i]);}printf("\n");return0;}C. 排序3
直接冒泡即可,注意以EOFEOFEOF结尾的多组输入
#include<stdio.h>inta[1010];intmain(){intn;while(scanf("%d",&n)!=EOF){for(inti=0;i<n;i++){scanf("%d",&a[i]);}for(inti=0;i<n-1;i++){for(intj=0;j<n-1-i;j++){if(a[j]>a[j+1]){intt=a[j];a[j]=a[j+1];a[j+1]=t;}}}for(inti=0;i<n-1;i++){printf("%d ",a[i]);}printf("%d\n",a[n-1]);}return0;}D. 排序4
双重forforfor循环遍历每两个数,将ai−aja_i - a_jai−aj和aj−aia_j - a_iaj−ai加入一个数组中,冒泡即可。
#include<stdio.h>inta[1010],b[10005];intmain(){intn;intm=0;scanf("%d",&n);for(inti=0;i<n;i++){scanf("%d",&a[i]);}for(inti=0;i<n-1;i++){for(intj=i+1;j<n;j++){b[m++]=a[i]-a[j];b[m++]=a[j]-a[i];}}for(inti=0;i<m-1;i++){for(intj=