第一种代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
char name(int i) //存入人名用
{
char *name[10];
name[0]="徐敏";
name[1]="刘雨萌";
name[2]="楚黎";
name[3] ="Tom";
name[4]="Lucy";
name[5]="Jack";
name[6]="ZY";
name[7]="张仪";
name[8]="王科";
name[9]="杨怡";
printf("%s\t",name[i]);
}
int main(void) //排列和输出用
{
int i=0 ;
int money[10];
int j,k,IMoney[10],money1,num;
printf("抢红包咯!\n");
srand((unsigned int)time(NULL));
for(i=0;i<10;i++)
{
name(i); //用自定义name函数输出姓名
money[i]=rand()%10+1; //将随机取出的金额存入数组
printf("%d元\n",money[i]);
}
//接下来我们进行排序
for(j=0,k=0;j<10;j++,k++) //先把按照顺序标注的i,存入一个数组
{
IMoney[j]=k;
}
for(j=1;j<10;j++) //外层循环下标1~9 //利用冒泡排序的方法将钱按照从小到大的顺序排列,与此同时原来的数组的序号不变,随着钱的大小移动而移动
{
for(k=9;k>=j;k--) //内层循环i~9
{
if(money[k]<money[k-1]) //如果前一个数比后一个数大
{
money1=money[k-1]; //就交换两个数组中的元素的次序
money[k-1]=money[k];
money[k]=money1;
num=IMoney[k-1]; //同时标号i的也要交换次序,但每个人所拥有的金额数字不变
IMoney[k-1]=IMoney[k];
IMoney[k]=num;
}
}
}
printf("手气最佳者为:\n");
for(j=9,k=9;j>=0&&money[j]==money[j-1];j--,k--)
{
name(IMoney[k-1]);
printf("%d 元",money[j-1]);
printf("\n");
}
k=9;
name(IMoney[k]);
printf("%d元\n",money[k]);
printf("\n");
return 0;
}
第二种代码(未解决:简洁地同时输出多个手气最佳者)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
char name(int i) //存入人名用
{
char *name[10];
name[0]="徐敏";
name[1]="刘雨萌";
name[2]="楚黎";
name[3] ="Tom";
name[4]="Lucy";
name[5]="Jack";
name[6]="ZY";
name[7]="张仪";
name[8]="王科";
name[9]="杨怡";
printf("%s\t",name[i]);
}
int main(void) //排列和输出用
{
int i=0 ;
int money[10];
int j,max;
printf("抢红包咯!\n");
srand((unsigned int)time(NULL));
for(i=0;i<10;i++)
{
name(i); //用自定义name函数输出姓名
money[i]=rand()%10+1; //将随机取出的金额存入数组
printf("%d元\n",money[i]);
if(money[i]>max)
{
max=money[i];
j=i;
}
}
printf("手气最佳者:");
name(j);
printf("%d元",max);
return 0;
}
版权声明:本文为m0_70516348原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。