Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

各位大牛们,看看我这是怎么错的,提供几组数据吧

Posted by hutu_2000 at 2009-04-12 11:29:26 on Problem 2426
#include <iostream>
#include <memory>
using namespace std;
int t[1005];
char s[1005];             //得到数据i的上一个操作是什么
void output(int x,int data);
int main()
{
    bool exist[1005];             //记录i这个数据是否已经产生
    int str[1005],str0[1005],n,k,m,data,i,j;                  //得到结果i的上一个数据是什么
    while(scanf("%d %d %d",&n,&k,&m)==3&&!(n==0&&k==0&&m==0))
    {
        int num=0,length=0,length0=1;
        memset(exist,0,sizeof(exist));
        data=((n+1)+k*1000)%k;
        str0[0] = (n+k*1000)%k;
        exist[str0[0]]=1;
        while(1)
        {
            int d;
            num++;
            for(i=0;i<length0;i++)
            {
                d=(str0[i]+m)%k;
                if(exist[d]==0)
                {
                    exist[d]=1; str[length++]=d;
                    s[d]='+'; t[d]=str0[i];
                }
                if(d==data) break;
                
                d=(str0[i]-m+k*1000)%k;
                if(exist[d]==0)
                {
                    exist[d]=1; str[length++]=d;
                    s[d]='-'; t[d]=str0[i];
                }
                if(d==data) break;
                
                d=(str0[i]*m)%k;
                if(exist[d]==0)
                {
                    exist[d]=1; str[length++]=d;
                    s[d]='*'; t[d]=str0[i];
                }
                if(d==data) break;
                
                d=(str0[i]%m)%k;
                if(exist[d]==0)
                {
                    exist[d]=1; str[length++]=d;
                    s[d]='%'; t[d]=str0[i];
                }
                if(d==data) break;         //???
            }

            if(d==data)
            {
                printf("%d\n",num);
                output((n+k*1000)%k,data); 
                printf("\n"); break;
            }
            else
            {
                if(length==0)
                {
                    printf("0\n"); break;
                }
                for(i=0;i<length;i++)
					str0[i]=str[i];
                length0=length; length=0;
            }
        }
    }
    return 0;
}

void output(int x,int data)
{
    if(x!=data)
    {
        output(x,t[data]);
        printf("%c",s[data]);
    }
    else return ;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator