回 帖 发 新 帖 刷新版面

主题:请高手帮忙把这个c语言程序转化成c++程序

#include <stdio.h>
#include <math.h>
long caculate(int day,int circlenum);
void main()
{
    int n,k;
    long num,m;
    printf("please input n:");
    scanf("%d",&n);
    //计算机最多安排的天数,这里包含第一天,第一天的圈数为0
    k=(int)(1+sqrt(1+8*n))/2;
    num=1;
    for(int i=k;i>2;i--)
    {
        m=caculate(i,n);
        num+=m;
        printf("%ld   ",m);
    }
    printf("\nk=%d\n",k);
    printf("%ld\n",num);


}
long caculate(int day,int circlenum)
{
    int x;
    long sum;
    if(day==3)
        if (circlenum%2==0)
            return circlenum/2-1;
        else
            return circlenum/2;
    else
    {
        x=(int)(((double)circlenum)/(day-1)-(day-2)/2.0);
        //printf("%d  ",x);
        sum=0;
        for(int i=x;i>0;i--)  //对每种安排,分别求出低一级问题的安排数,然后求得总和
        {
            sum+=caculate(day-1,circlenum-(day-1)*i);
        }
        return sum;
    }
}

回复列表 (共1个回复)

沙发




#include<iostream>
#include<cmath>

using namespace std;


long caculate(int day,int circlenum);

void main()
{
    int n,k;
    long num,m;
    cout<<"please input n:"<<endl;
    cin>>n;
    //计算机最多安排的天数,这里包含第一天,第一天的圈数为0
    k=(int)(1+sqrt((double)(1+8*n)))/2;
    num=1;
    for(int i=k;i>2;i--)
    {
        m=caculate(i,n);
        num+=m;
        cout<<m<<endl;
    }
    cout<<"k="<<k<<endl;
    cout<<num<<endl;

    return ;
}
long caculate(int day,int circlenum)
{
    int x;
    long sum;
    if(day==3)
        if (circlenum%2==0)
            return circlenum/2-1;
        else
            return circlenum/2;
    else
    {
        x=(int)(((double)circlenum)/(day-1)-(day-2)/2.0);
        //printf("%d  ",x);
        sum=0;
        for(int i=x;i>0;i--)  //对每种安排,分别求出低一级问题的安排数,然后求得总和
        {
            sum+=caculate(day-1,circlenum-(day-1)*i);
        }
        return sum;
    }
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册