做周边的专业网站,单位建设网站申请信用卡,外贸数据,企业网站手机端模板下载Problem - E - Codeforces digsum(a)digsum(b)digsum(c)digsum(n) 要点一#xff1a;
当左边和发生进位#xff0c;比如56 11#xff0c;那么数位和会变小。其实下一位就是相加后对9取余#xff0c;各数位和必定变小的。
要点二#xff1a;
然后就是组合情况了#x…Problem - E - Codeforces digsum(a)digsum(b)digsum(c)digsum(n) 要点一
当左边和发生进位比如56 11那么数位和会变小。其实下一位就是相加后对9取余各数位和必定变小的。
要点二
然后就是组合情况了
我们输入的是n也就是说我们需要把n拆成a,b,c
每个数位单独看最后所有数位乘起来就可以比如第一位的排列数乘以第二位的排列数。
每一位有三个数相加每个数可以是0~9
那么我们可以遍历所有情况即打表
int harr[10];
for (int i 0; i 9; i){for (int j 0; j 9; j){for (int k 0; k 9; k){if(ijk10)harr[i j k];}}}
这里i j k分别代表a b c 某数位的数字ijk就是该位的n啦
大于10即进位的情况就不要了。
这里遍历所有情况了比如 1,2,0 2,1,0 0,2,1都是可以遍历到的。
打表结果有人手搓 一开始自己手搓了没想到这种办法。。搓完都忘记自己要干什么了
//0 0 0 0
// 100 3种 110 3种 120 6种 111 1种 112 3种 123 6种
// aaa组合 1 abb组合 3 abc组合 6
//1 1 0 0
//2 2 0 0 , 1 1 0
//3 3 0 0 , 2 1 0 , 1 1 1
//4 4 0 0 , 3 1 0 , 2 2 0 , 2 1 1
//5 5 0 0 , 4 1 0 , 3 2 0 , 3 1 1 , 2 2 1
//6 6 0 0 , 5 1 0 , 4 2 0 , 3 3 0 , 4 1 1 , 3 2 1 , 2 2 2
//7 7 0 0 , 6 1 0 , 5 2 0 , 4 3 0 , 5 1 1 , 4 2 1 , 3 3 1 , 3 2 2
//8 8 0 0 , 7 1 0 , 6 2 0 5 3 0 4 4 0 6 1 1 5 2 1 4 3 1 4 2 2 3 3 2
//9 9 0 0 8 1 0 7 2 0 6 3 0 5 4 0 7 1 1 6 2 1 5 3 1 4 4 1 5 2 2
// 4 3 2 3 3 3
//0: 1
//1: 3
//2: 6
//3: 3 6 1 10
//4: 3 6 3 3 15
//5: 3 6 6 3 3 21 //对应了前几个样例
//6: 3 6 6 3 3 6 1 28
//7: 3 6 6 6 3 6 3 3 36
//8: 3 6 6 6 3 3 6 6 3 3 45
//9: 3 6 6 6 6 3 6 6 3 3 6 1 55