今天用C语言把这个写出来了,虽然c不是很熟,写的还是蛮简单,目前还想写一个判断输入数字是否重复,重复就需要重新输入,由于时间原因,还没有写。
代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h>//存储信息的结构体 typedef struct scoreNode{ double score; char name[10]; struct scoreNode *next; }scoreNode,*scoreLink; //寻找与黄金点相隔最近与最远的人(目前还没考虑输入数字相同的情况)最近加一分 最远减一分 void findM(scoreNode *inLink,scoreNode *scLink,double aver){ char name[10];//存储最近人姓名 char name1[10];//存储最远 double temp0,temp1; scoreNode *p=NULL; p=scLink; temp0=temp1=fabs(inLink->score-aver); strcpy_s(name,strlen(inLink->name)+1,inLink->name); strcpy_s(name,strlen(inLink->name)+1,inLink->name); inLink=inLink->next; //printf("%lf\n",inLink->score); while(inLink){ double temp2=fabs(inLink->score-aver); if(temp0>temp2){ temp0=temp2; strcpy_s(name,strlen(inLink->name)+1,inLink->name); } if(temp1<temp2){ temp1=temp2; strcpy_s(name1,strlen(inLink->name)+1,inLink->name); } inLink=inLink->next; } while(scLink){ if(strcmp(name,scLink->name)==0){ scLink->score=scLink->score+1; } if(strcmp(name1,scLink->name)==0){ scLink->score=scLink->score-1; } scLink=scLink->next; } //打印输出 while(p){ printf("%s的得分为:%lf\n",p->name,p->score); p=p->next; } } void goldPoint(){ int num; int time; double sum=0; double aver; int i; scoreNode *head,*p,*q,*head0,*q0,*p0; head=NULL; head0=NULL; q=NULL; q=head; q0=head0; printf("请输入参加的人数:\n"); scanf_s("%d",&num); printf("请输入需要进行几轮:\n"); scanf_s("%d",&time); printf("第1轮开始\n");//第一轮需要咩个人输入自己的名字 和自己的数字 for(i=0;i<num;i++){ p=(scoreNode *)malloc(sizeof(scoreNode)); p0=(scoreNode *)malloc(sizeof(scoreNode)); printf("请输入你的名字:\n"); scanf_s("%s",p->name,sizeof(p->name)); printf("请输入你的分数:\n"); scanf_s("%lf",&p->score,sizeof(p->score)); p0->next=NULL; p->next=NULL; if(head==NULL){ head=p; q=p; }else{ q->next=p; q=p; } sum+=p->score;//初始化存放分数的链表 strcpy_s(p0->name,strlen(p->name)+1,p->name); p0->score=0; if(head0==NULL){ head0=p0; q0=p0; }else{ q0->next=p0; q0=p0; } } aver=sum/num*0.618; printf("aver=%lf\n",aver); q=head; q0=head0; findM(q,q0,aver); sum=0; printf("第1轮结束\n"); for(i=0;i<time-1;i++){ printf("第%d轮开始\n",(i+2)); q=head; while(q){ printf("%s请输入你的分数:\n",q->name); scanf_s("%lf",&q->score); sum+=q->score; q=q->next; } aver=sum/num*0.618; q=head; q0=head0; findM(q,q0,aver); sum=0; printf("第%d轮结束\n",(i+2)); } printf("游戏结束\n"); } void main(){ goldPoint(); }
时间: 2024-10-27 10:40:12