7.10蓝桥杯刷题
标签: 7.10蓝桥杯刷题
2023-07-14 18:23:31 96浏览
只有两种选择,一个是加入到一集合中去,一个是加入到二集合中去,结束的条件是对应下标的索引值等于A.length的时候,同时满足sum1和sum2都是偶数的情况下 count++;后序还可以考虑适当的剪枝进行优化,很巧妙的一道回溯算法的题目。
public class _求阶乘和 {
public static void main(String[] args) {
// 根据已有的知识 可以知道的是,现在要求s的末尾九位数字,已知的是39之后的阶乘他的后九位都是0;
//所以不需要计算到2023的阶乘
//一个数求出来的阶乘想要末尾有0
//数中必须要有2和5,已知的2的数目应该是远大于5的,所以需要找出5的数目
// 5 10 15 20 25 30 35 40 注意到了25里面有两个无,刚好四十的阶乘,后九位都为0;
long ans=0;
for (int i = 1; i <=39; i++) {
long sum=1;
for (int j = 1; j <=i; j++) {
sum=j*sum;
sum= (long) (sum%1e9);
}
ans+=sum;
}
System.out.println(ans%1000000000);
}
}
很巧妙的一道回溯算法的题目
class aMain {
static int count = 0;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int T = scanner.nextInt();
while (T-- > 0) {
int N = scanner.nextInt();
int[] A = new int[N];
for (int i = 0; i < N; i++) {
A[i] = scanner.nextInt();
}
count = 0;
backtrack(A, 0, 0, 0);
System.out.println(count % 1000000007);
}
}
static void backtrack(int[] A, int index, int sum1, int sum2) {
if (index == A.length) {
if (sum1 % 2 == 0 && sum2 % 2 == 0) {
count++;
}
return;
}
backtrack(A, index + 1, sum1 + A[index], sum2);
backtrack(A, index + 1, sum1, sum2 + A[index]);
}
}
只有两种选择,一个是加入到一集合中去,一个是加入到二集合中去,结束的条件是对应下标的索引值等于A.length的时候,同时满足sum1和sum2都是偶数的情况下 count++;
后序还可以考虑适当的剪枝进行优化,
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
暂无评论,快来写一下吧
展开评论