7-5 武将单挑
作者:互联网
你正在玩一款即时策略游戏,游戏中有若干君主(你是其中之一),每个君主手下都有若干武将。每名武将都有一个战力值。君主之间进行战争时有一个很奇怪的武将单挑模式。在该模式下,对战的君主每次各派出一名武将单挑,如果两个武将打平,则双方要再各派一个武将进行单挑,直到分出胜负为止。假设双方在第n次单挑中分出了胜负,则单挑获胜方取得战争胜利。如果一方没有武将可派了(一次战斗出战过的武将不能再次出战),而另一方有,则没有武将方失败。该模式似乎是大家单挑时把战力值大的先派出去即可。然而游戏并没有这么简单,游戏内部的策略是武将单挑时,将武将的战力值模除一个数,然后比较模除后的余数,余数大的会在单挑中获胜。这样各君主很难知道如何派将了。现在假设要模除的数为101,在这种单挑模式下,请你写一段程序来为各个君主排名。
提示:此题内存使用有限制。直接创建二维数组保存数据估计可以过60%的数据
输入格式:
第一行为一个整数n(1<n<5000),代表君主的个数。然后每个君主两行数据,格式为第一行是一个整数m(0<m<1000),代表该君主拥有武将的个数,第二行是m个整数,代表该君主依次派出的武将的战力值。
测试用例保证合法,且所有整数均可以用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<stdio.h>
#include<stdlib.h>
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<n;i++)
{
scanf("%d",&m);
a[i]=(int *)malloc(sizeof(int)*(m+1));
a[i][0]=m; //每一行首元素存储武将的数目
for(int j=1;j<m+1;j++)
{
scanf("%d",&a[i][j]);
}
}
int *t; //用于交换行元素的指针
for(int i=0;i<n-1;i++) //冒泡排序
{
for(int k=0;k<n-1-i;k++)
{
if(arrcmp(a[k],a[k+1])<0)
{
t=a[k];
a[k]=a[k+1];
a[k+1]=t;
}
}
}
for(int i=0;i<n;i++)
{
for(int j=1;j<a[i][0];j++)
{
printf("%d ",a[i][j]);
}
printf("%d\n",a[i][a[i][0]]);
}
for(int i=0;i<n;i++)
{
free(a[i]);
}
free(a);
a=NULL;
return 0;
}
//君主a的实力强于b,返回1;a弱于b,返回-1;实力相当,返回0
int arrcmp(int *a,int *b)
{
int min,max;
if(a[0]>=b[0]) //确定两个君主中武将数目的最小值
{
min=b[0];
max=a[0];
}
else
{
min=a[0];
max=b[0];
}
int flag=0;
for(int i=1;i<=min;i++)
{
if((a[i]%101)>(b[i]%101))
{
return 1;
break;
}
else if((a[i]%101)<(b[i]%101))
{
return -1;
break;
}
else
{
flag++;
}
}
if(a[0]==b[0]&&flag==a[0]) //a和b的武将数目相等时
{
return 0;
}
else //武将数目不相等时
{
if(flag==a[0])
{
return -1;
}
if(flag==b[0])
{
return 1;
}
}
}
标签:return,int,单挑,君主,flag,武将 来源: https://blog.csdn.net/m0_49371394/article/details/112853816