2009-05-10 16:08:47來源不明

2006 NOIP 普及組 NOIP2006 3.Jam的計數法

作法:(1)利用void叫出所有組合(2)還沒想到

想法:先說 我的做法沒有很好
    當組合剛好到的時候 進行輸出 當超過5個時就RETURN

/************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int input[27]={0};
int s,t,w;
int way[27]={0},time=0,flag=0;
void make (int now,int num)
{
 int a,b;
 for(a=num;a<=t;a++)
  {
   way[now]=a;
   if(flag==1&&now==w-1&&time<5)
    {
     time++;
     for(b=0;b<w;b++)
      printf("%c",way[b]+'a'-1);
      printf("\n");
    }
   if(flag==0&&now==w-1)
    {
     for(b=0;b<w;b++)
      if(way[b]!=input[b]) break;
     if(b==w) flag=1; 
    }
   if(now+1<=w-1)
     make(now+1,a+1);
   if(time==5) return;
  }
}
main()
{
 char x[27]={0};
 while(scanf("%d %d %d",&s,&t,&w)==3)
  {
   scanf("%s",x);
   time=0;
   flag=0;
   int a,b,n=strlen(x);
   for(a=0;a<n;a++)
     input[a]=x[a]-'a'+1;
    make(0,s);
  }
 return 0;
}