XMU1338.数字九的游戏   水题

1338.数字九的游戏
Time Limit: 1000 MS         Memory Limit: 65536 K
Total Submissions: 156 (71 users)         Accepted: 70 (55 users)
[ My Solution]

Description

      一年一度的厦门大学ACM竞赛又开始了,今年已经是第九届了。在这儿,YT要和大家玩一个关于数字九的游戏,游戏很简单,YT在心中想出一个两位以上(含两位)的正整数A,然后求出从1到A的和sumA,将sumA模上9得到n;YT去掉A的某一位上的数,得到一个新数字B,然后求出从1到B的和sumB,将sumB模上9得到m。现在已知n和m,您能告诉YT去掉位上的数字是多少么?

Input

第一行一个数字C(C<=10000),表示输入数据组数
从第二行开始每行两个数字 n,m(0=<n,m<9),分别为sumA、sumB模上9的值。

Output

根据输入的n,m请告诉YT去掉位上的数字的值,若有多个可能值,请按从小到大的顺序输出所有可能值;若不存在这样的值,请输出“Poor YT, your calculation is wrong.”(不包括引号)。

Sample Input

2
0 0
0 2

Sample Output

0 1 8 9
Poor YT, your calculation is wrong.


思路 暴力求出以后打表   

暴力打表代码:

#include<stdio.h>
#include<string.h>
#define max 100000  //太大会溢出
int a[max];
struct haha
{
 int a[10];
}map[10][10];
int sum[max];
void get_sum()
{
 int i;
 sum[0]=0;
 for(i=1;i<max;i++)
  sum[i]=sum[i-1]+i;
}
int main()
{
 //freopen("c://out.txt","w",stdout);
 int n,m,i,j,k,num,d,c1,c2;
 char s[20],s2[20];
 get_sum();
 for(i=0;i<10;i++)
  for(j=0;j<10;j++)
   for(k=0;k<10;k++)
   map[i][j].a[k]=0;
 for(i=10;i<=100000;i++)
 {//i=12345;
          n=sum[i]%9;
    sprintf(s,"%d",i);
    d=strlen(s);
    for(j=0;j<d;j++)
    {
     c1=0;
                for(k=0;k<d;k++)
    {
     if(k!=j)  s2[c1++]=s[k];
    }
    s2[c1]='\0';
    sscanf(s2,"%d",&num);
    //printf("num=%d\n",num);
          m=sum[num]%9;
    map[n][m].a[s[j]-'0']=1;
    }
 }
  for(i=0;i<10;i++)
       for(j=0;j<10;j++)
   {
    int k;
    printf("%d %d:",i,j);
    for(k=0;k<10;k++)
     if(map[i][j].a[k])
     printf("%d ",k);
    printf("\n");
          
   }
 return 0;
}

打表结果:

0 0:0 1 8 9
0 1:1 2 4 5 7 8
0 2:
0 3:2 3 6 7
0 4:
0 5:
0 6:3 4 5 6
0 7:
0 8:
0 9:
1 0:1 2 4 5 7 8
1 1:0 3 6 9
1 2:
1 3:1 2 4 5 7 8
1 4:
1 5:
1 6:1 2 4 5 7 8
1 7:
1 8:
1 9:
2 0:
2 1:
2 2:
2 3:
2 4:
2 5:
2 6:
2 7:
2 8:
2 9:
3 0:2 3 6 7
3 1:1 2 4 5 7 8
3 2:
3 3:0 4 5 9
3 4:
3 5:
3 6:1 3 6 8
3 7:
3 8:
3 9:
4 0:
4 1:
4 2:
4 3:
4 4:
4 5:
4 6:
4 7:
4 8:
4 9:
5 0:
5 1:
5 2:
5 3:
5 4:
5 5:
5 6:
5 7:
5 8:
5 9:
6 0:3 4 5 6
6 1:1 2 4 5 7 8
6 2:
6 3:1 3 6 8
6 4:
6 5:
6 6:0 2 7 9
6 7:
6 8:
6 9:
7 0:
7 1:
7 2:
7 3:
7 4:
7 5:
7 6:
7 7:
7 8:
7 9:
8 0:
8 1:
8 2:
8 3:
8 4:
8 5:
8 6:
8 7:
8 8:
8 9:
9 0:
9 1:
9 2:
9 3:
9 4:
9 5:
9 6:


AC代码

#include<stdio.h>
struct haha
{
 int a[10];
 int cnt;
}map[10][10];
void get()
{
     int i,j,k;
   for(i=0;i<10;i++)
  for(j=0;j<10;j++)
   map[i][j].cnt=0;
 map[0][0].a[0]=0;map[0][0].a[1]=1;map[0][0].a[2]=8;map[0][0].a[3]=9;
 map[0][0].cnt=4;
 map[0][1].a[0]=1;map[0][1].a[1]=2;map[0][1].a[2]=4;map[0][1].a[3]=5;map[0][1].a[4]=7;map[0][1].a[5]=8;
 map[0][1].cnt=6;
 map[0][3].a[0]=2;map[0][3].a[1]=3;map[0][3].a[2]=6;map[0][3].a[3]=7;
 map[0][3].cnt=4;
 map[0][6].a[0]=3;map[0][6].a[1]=4;map[0][6].a[2]=5;map[0][6].a[3]=6;
 map[0][6].cnt=4;
 map[1][0].a[0]=1;map[1][0].a[1]=2;map[1][0].a[2]=4;map[1][0].a[3]=5;map[1][0].a[4]=7;map[1][0].a[5]=8;
    map[1][0].cnt=6;
	map[1][1].a[0]=0;map[1][1].a[1]=3;map[1][1].a[2]=6;map[1][1].a[3]=9;
	map[1][1].cnt=4;
	map[1][3].a[0]=1;map[1][3].a[1]=2;map[1][3].a[2]=4;map[1][3].a[3]=5;map[1][3].a[4]=7;map[1][3].a[5]=8;
 map[1][3].cnt=6;
 map[1][6].a[0]=1;map[1][6].a[1]=2;map[1][6].a[2]=4;map[1][6].a[3]=5;map[1][6].a[4]=7;map[1][6].a[5]=8;
 map[1][6].cnt=6;
  map[3][0].a[0]=2;map[3][0].a[1]=3;map[3][0].a[2]=6;map[3][0].a[3]=7;
 map[3][0].cnt=4;
 	map[3][1].a[0]=1;map[3][1].a[1]=2;map[3][1].a[2]=4;map[3][1].a[3]=5;map[3][1].a[4]=7;map[3][1].a[5]=8;
 map[3][1].cnt=6;
 map[3][3].a[0]=0;map[3][3].a[1]=4;map[3][3].a[2]=5;map[3][3].a[3]=9;
 map[3][3].cnt=4;
 map[3][6].a[0]=1;map[3][6].a[1]=3;map[3][6].a[2]=6;map[3][6].a[3]=8;
 map[3][6].cnt=4;
 map[6][0].a[0]=3;map[6][0].a[1]=4;map[6][0].a[2]=5;map[6][0].a[3]=6;
 map[6][0].cnt=4;
 map[6][1].a[0]=1;map[6][1].a[1]=2;map[6][1].a[2]=4;map[6][1].a[3]=5;map[6][1].a[4]=7;map[6][1].a[5]=8;
 map[6][1].cnt=6;
 map[6][3].a[0]=1;map[6][3].a[1]=3;map[6][3].a[2]=6;map[6][3].a[3]=8;
 map[6][3].cnt=4;
 map[6][6].a[0]=0;map[6][6].a[1]=2;map[6][6].a[2]=7;map[6][6].a[3]=9;
 map[6][6].cnt=4;
}
int main()
{
 int n,m,cas,i;
 get();
 scanf("%d",&cas);
 while(cas--)
 {
	 scanf("%d %d",&n,&m);
	 if(map[n][m].cnt==0) printf("Poor YT, your calculation is wrong.\n");
	 else
	 {
           for(i=0;i<map[n][m].cnt-1;i++)
			   printf("%d ",map[n][m].a[i]);
		   printf("%d\n",map[n][m].a[i]);
	 }
 }
 return 0;
 
}




你可能感兴趣的:(XMU1338.数字九的游戏   水题)