首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求高手点拨“计算欧盟成员国权力系数”程序源代码中的异常

2012-12-31 
求高手点拨“计算欧盟成员国权力系数”程序源代码中的错误。高手,您好:我是一名学习软件的学生,由于刚刚接触V

求高手点拨“计算欧盟成员国权力系数”程序源代码中的错误。
高手,您好:
     我是一名学习软件的学生,由于刚刚接触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;
}

热点排行