求助大佬,循环到一千多的就停止了,不知道原因
查看原帖
求助大佬,循环到一千多的就停止了,不知道原因
418544
化尘star楼主2022/1/5 18:43
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int a[48000]={1,4};
int hh[11][48000],l=1,m;
struct kkk{
	int number;int n;
};
bool cm(kkk x,kkk y)
{
	return x.n<y.n;
}
kkk k[20];
void chu(int u)
{
	for(int i=0;i<=a[0];++i)
	{
		hh[k[l].number][i]=a[i];
	}
	hh[k[l].number][1]-=u%2+1;
	if(hh[k[l].number][1]<0)
	{
		hh[k[l].number][1]+=10;
		--hh[k[l].number][2];
		if(hh[k[l].number][2]<0)
		{
			hh[k[l].number][2]+=10;
			--hh[k[l].number][3];
		}
	}
	for(int i=hh[k[l].number][0];i>=2;--i)
	{
		hh[k[l].number][i-1]+=(hh[k[l].number][i]%3)*10;
		hh[k[l].number][i]/=3;
	}
	hh[k[l].number][1]/=3;
	if(hh[k[l].number][hh[k[l].number][0]]==0)--hh[k[l].number][0];
}
void work(int u)
{
	while(l<=m)
	{
		++u;
		for(int i=1;i<=a[0];++i)
    	{
    		a[i]+=a[i];
    	}
    	for(int i=1;i<=a[0];++i)
		{
			if(a[i]>=10)
			{
				a[i+1]+=a[i]/10;
				a[i]%=10;
				if(a[0]==i)
				++a[0];
			}
		}
	//cout<<k[l].n<<"hhh"<<u-1<<endl;
		if(k[l].n==u-1)
		{
		//cout<<u<<" ";
			chu(u);
			++l;
		}
	//cout<<l<<" "	
	}
}
int main() 
{
	cin>>m;
	for(int i=1;i<=m;++i)
	{
		cin>>k[i].n;
		k[i].number=i;
	}
	sort(k+1,k+1+m,cm);
	if(k[l].n==1)
	{
		hh[k[l].number][0]=1;
		hh[k[l].number][1]=1;
		++l;
	}
	if(k[l].n==2)
	{
    	hh[k[l].number][0]=1;
		hh[k[l].number][1]=2;
		++l;
	}
    work(2);
    for(int i=1;i<=m;++i)
    {
    	for(int j=hh[i][0];j>=1;--j)
    	{
    		printf("%d",hh[i][j]);
		}
    	cout<<endl;
	}
	return 0;
}
2022/1/5 18:43
加载中...