你正在玩一款即时策略游戏,游戏中有若干君主(你是其中之一),每个君主手下都有若干武将。每名武将都有一个战力值。君主之间进行战争时有一个很奇怪的武将单挑模式。在该模式下,对战的君主每次各派出一名武将单挑,如果两个武将打平,则双方要再各派一个武将进行单挑,直到分出胜负为止。假设双方在第n次单挑中分出了胜负,则单挑获胜方取得战争胜利。如果一方没有武将可派了(一次战斗出战过的武将不能再次出战),而另一方有,则没有武将方失败。该模式似乎是大家单挑时把战力值大的先派出去即可。然而游戏并没有这么简单,游戏内部的策略是武将单挑时,将武将的战力值模除一个数,然后比较模除后的余数,余数大的会在单挑中获胜。这样各君主很难知道如何派将了。现在假设要模除的数为101,在这种单挑模式下,请你写一段程序来为各个君主排名。
提示:此题内存使用有限制。直接创建二维数组保存数据估计可以过60%的数据
输入格式:
第一行为一个整数n(1 测试用例保证合法,且所有整数均可以用int类型存储。 输出格式: 共n行,每行为输入中一个君主的武将的战力值(按输入顺序原样输出),在此种单挑模式中最强的君主的数据最先输出,然后是第二强的,以此类推,最后输出是最弱的。 输入样例: 5 10 771 748 210 693 992 297 473 40 891 973 3 103 40 466 6 525 769 183 484 776 307 6 129 47 601 371 775 569 3 197 41 184 输出样例: 197 41 184 771 748 210 693 992 297 473 40 891 973 129 47 601 371 775 569 525 769 183 484 776 307 103 40 466 题意: 题意是各个君主按武将战力值的输入顺序出武将。 思路: 先写一个比较两个君主实力强弱的函数,然后使用排序算法并结合该函数得出输入的君主实力强弱的顺序;注意该题一定要用malloc函数。 代码实现: #include #include int arrcmp(int *a,int *b); //比较任意两个君主实力的函数 int main() { int n; scanf("%d",&n); int **a; a=(int **)malloc(sizeof(int *)*n); int m; for(int i=0;i { scanf("%d",&m); a[i]=(int *)malloc(sizeof(int)*(m+1)); a[i][0]=m; //每一行首元素存储武将的数目 for(int j=1;j { scanf("%d",&a[i][j]); } } int *t; //用于交换行元素的指针 for(int i=0;i { for(int k=0;k { if(arrcmp(a[k],a[k+1])<0) { t=a[k]; a[k]=a[k+1]; a[k+1]=t; } } }