[cpp] /********************************* * 日期:2013-1-29 * 作者:SJF0115 * 題號: 九度1167 * 題目:數組排序 * 來源: * 結果:AC * 題意: * 總結: **********************************/ #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct Data{ int number;//數據 int beforeOrder; //排序前序號 int afterOrder;//排序後序號 }Data; //排序函數 int cmp(const void *a,const void *b) { struct Data *c=(Data*)a; struct Data *d=(Data*)b; return c->number - d->number; } int cmp2(const void *a,const void *b) { struct Data *c=(Data*)a; struct Data *d=(Data*)b; return c->beforeOrder - d->beforeOrder; } int main() { int n,i; //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin); while(scanf("%d",&n)!=EOF) { Data data[10001]; //輸入數據 for(i = 0;i < n;i++){ scanf("%d",&data[i].number); data[i].beforeOrder = i; data[i].afterOrder = 1; } //按數據大小排序 qsort(data,n,sizeof(data[0]),cmp); //計算排序後的序號 for(i = 0;i < n-1;i++){ if(data[i].number == data[i+1].number){ data[i+1].afterOrder = data[i].afterOrder; } else if(data[i].number < data[i+1].number){ data[i+1].afterOrder = data[i].afterOrder + 1; } } //按排序前序號排序 qsort(data,n,sizeof(data[0]),cmp2); //按排序前序號輸出數據 for(i = 0;i < n;i++){ printf("%d",data[i].afterOrder); if(i == n-1){ printf("\n"); } else{ printf(" "); } } } return 0; } /********************************* * 日期:2013-1-29 * 作者:SJF0115 * 題號: 九度1167 * 題目:數組排序 * 來源: * 結果:AC * 題意: * 總結: **********************************/ #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct Data{ int number;//數據 int beforeOrder; //排序前序號 int afterOrder;//排序後序號 }Data; //排序函數 int cmp(const void *a,const void *b) { struct Data *c=(Data*)a; struct Data *d=(Data*)b; return c->number - d->number; } int cmp2(const void *a,const void *b) { struct Data *c=(Data*)a; struct Data *d=(Data*)b; return c->beforeOrder - d->beforeOrder; } int main() { int n,i; //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin); while(scanf("%d",&n)!=EOF) { Data data[10001]; //輸入數據 for(i = 0;i < n;i++){ scanf("%d",&data[i].number); data[i].beforeOrder = i; data[i].afterOrder = 1; } //按數據大小排序 qsort(data,n,sizeof(data[0]),cmp); //計算排序後的序號 for(i = 0;i < n-1;i++){ if(data[i].number == data[i+1].number){ data[i+1].afterOrder = data[i].afterOrder; } else if(data[i].number < data[i+1].number){ data[i+1].afterOrder = data[i].afterOrder + 1; }www.2cto.com } //按排序前序號排序 qsort(data,n,sizeof(data[0]),cmp2); //按排序前序號輸出數據 for(i = 0;i < n;i++){ printf("%d",data[i].afterOrder); if(i == n-1){ printf("\n"); } else{ printf(" "); } } } return 0; }