如何看懂c语言程序_想请懂c语言的朋友帮帮忙,看看这段程序怎么改。

原问题:想请懂c语言的朋友帮帮忙,看看这段程序怎么改。
分类:编程开发 > 最后更新时间:【2016-12-31 19:21:25】
问题补充:

运行了下运行不完善。不知道哪里错了。帮忙改改,能运行出结果就好。

#include<stdio.h>

#include <conio.h>

#include <windows.h>

void main( )

{

int P1,P2,P3;

int n1,n2,n3,N;

double Q1,Q2,Q3;

int cnt=4;

int flag1,flag2,flag3;

printf("请输入A,B,C三个系的学生人数:");

scanf("%d%d%d",&P1,&P2,&P3);

printf("请输入代表的总人数(>=4):");

scanf("%d",&N);

n1=1,n2=1,n3=1;

printf("第 1 个席位给 A.\n");

printf("第 2 个席位给 B.\n");

printf("第 3 个席位给 C.\n");

while(n1+n2+n3<N)

{

flag1=0;

flag2=0;

flag3=0;

Q1= double(P1*P1)/(n1*(n1+1));

Q2= double(P2*P2)/(n2*(n2+1));

Q3=( doubleP3*P3)/(n3*(n3+1));

printf("相对不公平值: %6.1lf,%6.1lf,%6.1lf;",Q1,Q2,Q3);

if(Q1>=Q2 & Q1>=Q3)

{

flag1=1;

n1++;

}

else

if(Q2>=Q1 & Q2>=Q3)

{

flag2=1;

n2++;

}

else

if(Q3>=Q1 & Q3>=Q2)

{

flag3=1;

n3++;

}

if(flag1==1)

{

printf("第 %d 个席位给 A.\n",cnt);

}

if(flag2==1)

{

printf("第 %d 个席位给 B.\n",cnt);

}

if(flag3==1)

{

printf("第 %d 个席位给 C.\n",cnt);

}

cnt++;

}

printf("\n总结: A 系占 %d 席, B 系占 %d 席, C 系占 %d 席.\n",n1,n2,n3);

}

最佳答案

#include <stdio.h>

//#include <conio.h>

//#include <windows.h>

int main()

{

intP1, P2, P3;

intn1, n2, n3, N;

doubleQ1, Q2, Q3;

int cnt = 4;

int flag1, flag2, flag3;

printf( "请输入A,B,C三个系的学生人数:" );

scanf( "%d%d%d", &P1, &P2, &P3 );

printf( "请输入代表的总人数(>=4):" );

scanf( "%d", &N );

n1 = 1, n2 = 1, n3 = 1;

printf( "第 1 个席位给 A.\n" );

printf( "第 2 个席位给 B.\n" );

printf( "第 3 个席位给 C.\n" );

while ( n1 + n2 + n3 < N )

{

flag1 = 0;

flag2 = 0;

flag3 = 0;

Q1 = (double)(P1 * P1) / (n1 * (n1 + 1) );

Q2 = (double)(P2 * P2) / (n2 * (n2 + 1) );

Q3 = (double)(P3 * P3) / (n3 * (n3 + 1) );

printf( "相对不公平值: %6.1lf,%6.1lf,%6.1lf;", Q1, Q2, Q3 );

if ( Q1 >= Q2 && Q1 >= Q3 )

{

flag1 = 1;

n1++;

}

else if ( Q2 >= Q1 && Q2 >= Q3 )

{

flag2 = 1;

n2++;

}else if ( Q3 >= Q1 && Q3 >= Q2 )

{

flag3 = 1;

n3++;

}

if ( flag1 == 1 )

{

printf( "第 %d 个席位给 A.\n", cnt );

}

if ( flag2 == 1 )

{

printf( "第 %d 个席位给 B.\n", cnt );

}

if ( flag3 == 1 )

{

printf( "第 %d 个席位给 C.\n", cnt );

}

cnt++;

}

printf( "\n总结: A 系占 %d 席, B 系占 %d 席, C 系占 %d 席.\n", n1, n2, n3 );

return 0;

}

运行结果如下:


追问:
你知道要增加到9个系要怎么改吗?除了int后面和后面printf里那些。后面的算法怎么改?
  • 追答:
    要写适应m方的分配程序,可考虑把定义一个m行2列的二维数组(比如n[m][2]),每个系占一行,每一行里2个元素分别代表:该系的人数,该系分配的席位数。然后写一个函数:参数:为上一轮分配的结果(可传入数组指针,比如n)功能:每次调用分配一个席位返回:本轮分配席位给哪个系的数组的一维下标(比如返回3,就代表本轮席位分配给第4个系)。当然要是感觉下标和第几个系差1不舒服的话,可以定义m+1行2列数组,第0行放弃不用就是了。下边是我在网上找到的一个Q值分配的算法,请对照写出语句就行了:当新分配1席时计算:Qi=(pi*pi)/ni(ni+1) ,i=1,2,3,…,m。增加的1席分配给Q值大的一方。
    最佳答案由网友    提供
  • 公告: 为响应国家净网行动,部分内容已经删除,感谢网友理解。
    5

    分享到:

    其他回答

    暂无其它回答!

      推荐