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 rickyjen at 2005-09-07 10:17:19 on Problem 1016
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define TIMES 17   //求inventory的次数
#define LEN 165    //每个inventory的最大长度.

void main()
{
  void _free(struct str *&p);
  void print(char *p,int n1,int n2);
  void getinventory(char p[][LEN],int n);
  char str[TIMES][LEN];
  int i,k,t;
  while(1)
  {  
      scanf("%s",str[0]);
	  if(str[0][0]=='-')break;
      for(i=1;i<=16;i++)
	  {
		  getinventory(str,i);//求得string[i-1]的目录数字,存于string[i]中.
	      for(k=i-1;k>=0&&strcmp(str[i],str[k])!=0;k--);
		  if(k>=0)break;
	  }
	  if(i==17)i--;
	  print(str[0],i,k);
	  
  }
}
void getinventory(char p[][LEN],int n)//求得p[i-1]的inventory,存于p[i]中.
{
	void chang(char *p,int &pos,int n,char c);
    int count,i,posi=0;
	char c,*p1;
    for(c='0';c<='9';c++)
	{
		for(p1=p[n-1],i=count=0;p1[i]!='\0';i++)
			if(c==p1[i])count++;
	    chang(p[n],posi,count,c);
	}
}
void chang(char *p,int &pos,int n,char c)//将整数n转化成字符'0','1'....存放pos开始的空间.
//然后将c也存入.
{
	if(n)
	{   int w=1;
	    while(n%(w*10)!=n)w*=10;
        for(;w>0;n%=w,w/=10)p[pos++]='0'+n/w;
		p[pos++]=c;
		p[pos]='\0';
    }
}
void print(char *p,int n1,int n2)
{
	if(n1==1)printf("%s is self-inventorying\n",p);
	else if(n2==n1-1)printf("%s is self-inventorying after %d steps\n",p,n2);
	else if(n1==16)printf("%s can not be classified after 15 iterations\n",p);
	else printf("%s enters an inventory loop of length %d\n",p,n1-n2);
}

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