传送门:timus 1095
题意:给出一个数字(可能是大数),其中1,2,3,4每个数至少出现一次,将大数数字重新排列,输出一个能被7整除且不以0为前缀的结果,如果没有,则输出0
思路:
利用1,2,3,4至少出现一次的信息先枚举一下他们的组合mod7的情况,因为所有整形数mod7结果只能出现7种情况
7是一个不一般的数啊 不一般体现在这里
( 10%7=3
20%7=6
30%7=2;
40%7=5;
50%7=1;
60%7=4;)
这个可以先通过写测试代码来模拟相应的结果
int i,j,k,h,sum; bool map[7]; //标记是否已有满足条件的数 char comb[7][10]; memset(map,false,sizeof(map)); for(i=1;i<=4;i++) for(j=1;j<=4;j++) for(k=1;k<=4;k++) for(h=1;h<=4;h++) if(i!=j&&i!=k&&i!=h&&j!=k&&j!=h&&k!=h){ sum=i*1000+j*100+k*10+h; if(map[sum%7]==false){ map[sum%7]=true; comb[sum%7][0]=i; comb[sum%7][1]=j; comb[sum%7][2]=k; comb[sum%7][3]=h; comb[sum%7][4]='\0'; } } for(i=0;i<7;i++){ if(map[i])printf("mod7余%d:%s\n",i,comb[i]); }
输出发现0~6都有对应的comb值
这说明什么?尽在不言中!
前缀不能为0,那把所有0安排在最后面
1,2,3,4每个数留一个做最后的判断,
像 11112345670
就可以先求出111567的余数,把0放到最后(嗯,看到这里应该不用再说下去了,已经显而易见该怎么弄了吧!)
是不是可以再把题目改编一下,如果输出结果是大数能被9整除呢?
(这个应该是更简单的!呼呼,比较杂乱的推理)
时间: 2024-11-13 02:14:48