永发信息网

ACM 编程问题

答案:1  悬赏:60  手机版
解决时间 2021-05-10 13:34
  • 提问者网友:遮云壑
  • 2021-05-09 20:47

题目地址: http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=3106

(提交后系统提示Compile Error (我的结构体数组定义太大的原因))

怎么办?帮忙解决下,谢谢。

以下是我的代码:

#include<iostream>
#include<map>
struct bobo//定义啦名为bobo的结构体
 {
  int a[1000000];
 }num[10000];
int b[10000];
using namespace std;
int main()
{
 int n,x,i,j,m,t;
 map<int,int>p2;//定义了一个map映像(是行数与每行输入个数的对应),下面要用到
 while(cin>>n)
 {  
   int bo=0;
   for(i=0;i<n;i++)
   {cin>>m;
   int s=0;
   for(j=0;j<m;j++)
   {
    cin>>num[i].a[j];//对数据输入并保存到结构体中
    s+=num[i].a[j];//对于每行的数据求和
   }
    b[i]=s;//把每行数据保存到数组b中以便进行下一步的排序
    p2[i]=m;//将行与输入个数对应
   }
   int c[10000];//定义c数组是为了得到b数组排序后数组中的数在原来未排序时的位置状况
   for(i=0;i<n;i++)//将数组c从0赋值到n-1;其实就是b数组的下标
   c[i]=i;
   for(j=n-1;j>=0;j--)//冒泡法将b数组进行递减排序
   for(i=0;i<j;i++)
   if(b[i]<b[i+1])
   {
   t=b[i];
   b[i]=b[i+1];
   b[i+1]=t;
   t=c[i];//当b中数交换时,下标也交换
   c[i]=c[i+1];
   c[i+1]=t;
   }
   for(i=0;i<n;i++)//排序后按对应关系输出,即从最大的开始输出
   if(b[i]!=0)
   {
   cout<<c[i]+1<<":";
   for(j=0;j<p2[c[i]];j++)
   cout<<" "<<num[c[i]].a[j];
   cout<<endl;
   }
   cout<<endl;
  }
}

最佳答案
  • 五星知识达人网友:夜余生
  • 2021-05-09 20:59
这道题很简单,学过组合数学很快就能编程得到,n(1<=n<=11)个英雄里选m(1<=m<=n)个人围成一个圈,共能围成多少种圈, 组合数学公式就是A(n,m)/m,A表示全排列:#include<stdio.h>int main()return 0;}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯