题目:http://acm.hdu.edu.cn/showproblem.php?pid=1872
代码:
#include<stdio.h> #include<string.h> #include<stdlib.h> int main(){ int N; while(scanf("%d",&N)!=EOF){ char a[400][60],b[400][60]; int c[400],d[400],i,j,temp; int id[400];//记录按学生成绩稳定排序后的数据组号; for(i=0;i<N;i++){ getchar(); scanf("%s %d",a[i],&c[i]); id[i]=i; } for(i=0;i<N;i++){ getchar(); scanf("%s %d",b[i],&d[i]); } for(i=0;i<N-1;i++){//冒泡排序(递减排序); for(j=0;j<N-i-1;j++){ if(c[id[j]]<c[id[j+1]]){ temp=id[j]; id[j]=id[j+1]; id[j+1]=temp; } } } //for(i=0;i<N;i++)printf("%d ",id[i]); int flag=1;//记录排序结果是否正确; int flag_2=1;//记录排序结果是否稳定; for(i=0;i<N;i++){ if(c[id[i]]!=d[i])flag=0; if(strcmp(a[id[i]],b[i])!=0)flag_2=0; } if(flag==1&&flag_2==1){//排序算法正确且稳定; printf("Right/n"); } else if(flag==1&&flag_2==0){//排序算法正确但不稳定; printf("Not Stable/n"); for(i=0;i<N;i++){ printf("%s %d/n",a[id[i]],c[id[i]]); } } else if(flag==0&&flag_2==0){//排序算法正错误; printf("Error/n"); for(i=0;i<N;i++){ printf("%s %d/n",a[id[i]],c[id[i]]); } } } }