黄金分割点c的坐标c语言,黄金分割点(第五周 c语言版)

在上一周,学习其他课程的同时,用C语言编写了黄金分割点小游戏。因为要做界面需要mfc,当时学的时候还做了个简单的计算器。目前c++的知识忘的差不多了,所以就先用C语言来实现算法。打算接下来的一周复习c++,做界面。以下是代码:

#include

#include

#include"windows.h"

double getG(int* a,int n);

void getdif(double* a,double * b,int n);

void end(double* b,int* compare,int n);

void rank(int* score,int* c,int* d,int n);

void main()

{

int i,n,m,j;

double a[20],b[20]; //a保存数字,b保存差值,c保存b数组的值,d为排好序的下标

int score[20],d[20],c[20];

int compare[2]={0,0};

for(i=0;i<20;i++)

{

a[i]=0;

score[i]=0;

b[i]=0;

c[i]=0;

d[i]=0;

}

printf("请输入共进行几轮:");

scanf("%d",&m);

printf("请输入玩家人数:");

scanf("%d",&n);

for(j=0;j

{

printf("开始第%d轮游戏\n",j+1);

for(i=0;i

{

printf("请输入第%d个玩家的数字:\n",i+1);

scanf("%lf",&a[i]);

}

for(i=0;i

{

getdif(a,b,n);

end(b,compare,n);

if(b[i]==b[compare[0]])

score[i]=score[i]+n;

else if(b[i]==b[compare[1]])//注意用else if

score[i]=score[i]-2;

printf("%d号玩家分数为:%d\n",i+1,score[i]);

}

system("pause");

system("cls");

}

printf("-----------成绩总排名-----------\n");

rank(score,c,d,n);

for(i=0;i

{

printf("第%d名:%d号玩家%d\n",i+1,d[i],score[i]);

}

}

double getG(double* a,int n) //求G值

{

int i;

double sum=0,ave,G;

for(i=0;i

{

sum=sum+a[i];

}

ave=sum/n;

G=ave*0.618;

return G;

}

void getdif(double* a,double * b,int n) //将差值存在数组b中,defference,val:差值;

{

int i;

double difference,val;

double c = getG(a,n);

for(i=0;i

{

difference=a[i]-c;

val=fabs(difference);

b[i]=val;

}

}

void end(double* b,int* compare,int n) //通过比较差值的大小,选出最小和最大的。保存最小值和最大值的下标

{

int i;

double max,min;

max=b[0];

min=b[0];

for(i=0;i

{

if(min>b[i])

{

min=b[i];

compare[0]=i;//小

}

if(max

{

max=b[i];

compare[1]=i;//大

}

}

}

void rank(int* score,int* c,int* d,int n)

{

int i,q,temp=0;

for(i=0;i

{

c[i]=score[i];

}

for(i=1;i

for(q=0;q

if(score[q]

{

temp=score[q];

score[q]=score[q+1];

score[q+1]=temp;

}

for(i=0;i

{ //数组排序并输出原位置

for(q=0;q

{

if(score[i]==c[q])

{

d[i]=q+1;

c[q]=-100;

break;

}

}

}

}

写的时候出现好多问题,传值不匹配,逻辑错误等等。写最后一个对成绩进行排序的子函数时,我的想法是这样的:先将分数存到一个数组里,再对分数进行冒泡排序,最后用排好序的数组对存原分数的数组进行排序,但是结果一直是错误的,如下图:

2d2449977f1888dec965fc8ff4d93099.png

想了好久到底是哪里出了问题。。原来我忽略了出现相同分数的问题。于是再改,只需把遍历后的值赋一个大一点的跟正常分数区分开即可。这种方法比较麻烦,但是比较好理解,还可用快速排序。改好的子程序结果如下图:

1ccccd1021277125127d80cbf0d50c02.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值