求高手点拨“计算欧盟成员国权力系数”程序源代码中的错误。
高手,您好:
我是一名学习软件的学生,由于刚刚接触VS2010工作环境并且原来一直在学Java,最近刚刚开始学习C语言。
近日老师布置了一个作业:要求我们计算欧盟成员国排出了英国后的权力系数计算问题,题目背景需求如下:
欧盟投票,14个国家。(去掉英国)
法,德,意各持10票;
西班牙持8票;
比,西,荷,葡各持5票;
奥地利,瑞典各持4票;
爱,丹,芬各持3票;
卢森堡持2票;
欧盟一个决议需要各成员国投票后,以总票数超过62票为“决议通过并执行”的,边界条件。
当一个国家位于“其所持票能够影响到决议是否执行”时,其是为“关键角色”。
一个国家i的权力系数index的计算方法为:该国家i为关键角色时各成员国进行排列的可能个数/个成员国排列的总可能个数;
近日,我写出了下面的代码,以解决“求解欧盟排除英国后的各成员国权利系数的计算问题”的“未加统计CPU执行时间函数”版,程序源代码:
#include <stdio.h>
#include <iostream>
#include <iomanip>
#include <algorithm>
#define N 14
void perm(int);/*以下文中的perm()函数,来进行对诸成员国的“递归由数组a[N]中的下文的第“arrayhere”个元素进行排列的开始点的选取*/
void print();
void swap(int, int);
int a[N]={10,10,10,8,5,5,5,5,4,4,3,3,3,2};/*以数组a[N]作为各成员国所持票数的承载容器*/
long long count[N] = {0};
int main(){
int i,n,k;
int arrayhere;/*以上文中perm()函数的“传值参数”的身份,参与整个程序的计算*/
perm(0);
print();
system("pause");
}
void perm(int arrayhere){
int i;
if(arrayhere == N-1){
int sum = 0;
int i = 0;
for(i = 0; i < N; ++i)
{
sum += a[i];
if (sum >= 62)
break;
}
++count[i];
return;
}else{
for(i = arrayhere;i < N; i++){
swap(i, arrayhere);
perm(arrayhere + 1);
swap(i, arrayhere);
}
}
}
void print(){
double fact = 1;
for(int i = 2; i <= N; ++i)
{
fact *= i;
}
double index[N];
for(int i = 0; i < N; ++i)
index[i] = count[i]/fact;
printf("France power coefficient is %f%%\n",100*index[ 0]);
printf("German power coefficient is %f%%\n",100*index[ 1]);
printf("Italy power coefficient is %f%%\n",100*index[ 2]);
printf("Spanish power coefficient is %f%%\n",100*index[ 3]);
printf("Belgium power coefficient is %f%%\n",100*index[ 4]);
printf("Greece power coefficient is %f%%\n",100*index[ 5]);
printf("Holland power coefficient is %f%%\n",100*index[ 6]);
printf("Portuguese power coefficient is %f%%\n",100*index[ 7]);
printf("Austria power coefficient is %f%%\n",100*index[ 8]);
printf("Sweden power coefficient is %f%%\n",100*index[ 9]);
printf("Ireland power coefficient is %f%%\n",100*index[10]);
printf("Denmark power coefficient is %f%%\n",100*index[11]);
printf("Finland power coefficient is %f%%\n",100*index[12]);
printf("Luxembourg power coefficient is %f%%\n",100*index[13]);
double one = 0.0;
for(int i = 0; i < N; ++i)
one += index[i];
printf("The result is %f%%\n",one);/*以“one是否等于1”作为整个程序计算结果的“验证变量”*/
}
void swap(int i, int arrayhere){
int temp;
temp = a[arrayhere];
a[arrayhere] = a[i];
a[i] = temp;
高手,这是我修改后的代码,在VC6.0的编译环境下,还剩余了四到五个错误未通过编译。
本来这个问题,是应该由我自己解决而不应该麻烦高手为这个问题为我费心的。但是,今天我的PC由于重装了系统,系统中剩余了原来安装过的VS2008和VS2010的痕迹,导致现在我的VS2010仍然没有配置好。
本人刚刚学会使用VS2008,对VS2010的工作环境,也不熟悉..
本人诚挚地希望高手,能够为我的源代码,做出“完全修改”建议。
能够让本人在经过编译之后,通过明天老师的认证。并且,本人保证:会将高手做出的每一步修改,认认真真融会贯通。绝不偷懒!!
谢谢高手的过目。
现在我的可用分,只有70分了,我全部拿了出来。
如果高手真的做出了确确实实帮到我的忙了的工作,我会将您的名字记住,他日只要有机会。
我会将高手“帮我解决一个事”的人情,彻彻底底地,报答高手的情谊!!
谢谢高手!!
[解决办法]
以下的修改可以编译通过,注意using namespace std导入std命名空间,以便可以方便的使用STL,另外count命名与STL冲突,换个名称比较好:
#include <stdio.h>
#include <iostream>
#include <iomanip>
#include <algorithm>
using namespace std;
#define N 14
void perm(int);/*以下文中的perm()函数,来进行对诸成员国的“递归由数组a[N]中的下文的第“arrayhere”个元素进行排列的开始点的选取*/
void print();
void swap(int, int);
int a[N]={10,10,10,8,5,5,5,5,4,4,3,3,3,2};/*以数组a[N]作为各成员国所持票数的承载容器*/
long long lcount[N] = {0};
int main(){
int i,n,k;
int arrayhere;/*以上文中perm()函数的“传值参数”的身份,参与整个程序的计算*/
perm(0);
print();
//system("pause");
return 0;
}
void perm(int arrayhere){
int i;
if(arrayhere == N-1){
int sum = 0;
int i = 0;
for(i = 0; i < N; ++i)
{
sum += a[i];
if (sum >= 62)
break;
}
++lcount[i];
return;
}else{
for(i = arrayhere;i < N; i++){
swap(i, arrayhere);
perm(arrayhere + 1);
swap(i, arrayhere);
}
}
}
void print(){
double fact = 1;
for(int i = 2; i <= N; ++i)
{
fact *= i;
}
double index[N];
for(int i = 0; i < N; ++i)
index[i] = lcount[i]/fact;
printf("France power coefficient is %f%%\n",100*index[ 0]);
printf("German power coefficient is %f%%\n",100*index[ 1]);
printf("Italy power coefficient is %f%%\n",100*index[ 2]);
printf("Spanish power coefficient is %f%%\n",100*index[ 3]);
printf("Belgium power coefficient is %f%%\n",100*index[ 4]);
printf("Greece power coefficient is %f%%\n",100*index[ 5]);
printf("Holland power coefficient is %f%%\n",100*index[ 6]);
printf("Portuguese power coefficient is %f%%\n",100*index[ 7]);
printf("Austria power coefficient is %f%%\n",100*index[ 8]);
printf("Sweden power coefficient is %f%%\n",100*index[ 9]);
printf("Ireland power coefficient is %f%%\n",100*index[10]);
printf("Denmark power coefficient is %f%%\n",100*index[11]);
printf("Finland power coefficient is %f%%\n",100*index[12]);
printf("Luxembourg power coefficient is %f%%\n",100*index[13]);
double one = 0.0;
for(int i = 0; i < N; ++i)
one += index[i];
printf("The result is %f%%\n",one);/*以“one是否等于1”作为整个程序计算结果的“验证变量”*/
}
void swap(int i, int arrayhere){
int temp;
temp = a[arrayhere];
a[arrayhere] = a[i];
a[i] = temp;
}