一 .放像素
二 .求余数
因为2^2023太大了,如果求完全部次方再去取模这个这个值是非常大的。
我们这里可以用数学公式,就是边次方边取模,直到2023次方乘完,也就得到结果了:
三 .数位和相等
- 答案: 4169
四 .约数个数
数据:
393353 901440 123481 850930 423154 240461
373746 232926 396677 486579 744860 468782
941389 777714 992588 343292 385198 876426
483857 241899 544851 647930 772403 109929
882745 372491 877710 340000 659788 658675
296521 491295 609764 718967 842000 670302
思想
如果我们想求一个数x有多少个因子,只需要把x放到一个循环里,循环i从1开始,到x的一半结束即可。
循环体:让x去%i,余数t为0,那t就是x的一个因子,计数器++。
上面的图写错了,是求最大因子个数不是最大因子。
现在我们要输入6*6个数据,那我们就从文件里读取数据即可:
4).总结
- 答案: 901440
五.灌水
0000100010000001101010101001001100000011
0101111001111101110111100000101010011111
1000010000011101010110000000001011010100
0110101010110000000101100100000101001001
0000011010100000111111001101100010101001
0110000110000000110100000000010010100011
0100110010000110000000100010000101110000
0010011010100110001111001101100110100010
1111000111101000001110010001001011101101
0011110100011000000001101001101110100001
0000000101011000010011111001010011011100
0000100000011001000100101000111011101100
0010110000001000001010100011000010100011
0110110000100011011010011010001101011011
0000100100000001010000101100000000000010
0011001000001000000010011001100101000110
1110101000011000000100011001001100111010
0000100100111000001101001000001010010001
0100010010000110100001100000110111110101
1000001001100010011001111101011001110001
0000000010100101000000111100110010101101
0010110101001100000100000010000010110011
0000011101001001000111011000100111010100
0010001100100000011000101011000000010101
1001111010010110011010101110000000101110
0110011101000010100001000101001001100010
1101000000010010011001000100110010000101
1001100010100010000100000101111111111100
1001011010101100001000000011000110110000
0011000100011000010111101000101110110001
这道题我们可以通过dfs去搜索上下左右四个位置,如果这些位置的值为0,就把0变为2
我们可以通过偏移量的方式来表示上下左右四个方向:
- 答案:586
六.左移一位
题目描述:
给定一个正好六位的正整数 x,请将 x 循环左移一位后输出:
这道题用c的格式会更好看一些:
7-最大落差
分析:
我们维护一个最大落差:
八.最后的元音
题目:给定一个字符串,输出该字符串中最后一个元音字符
思想
(1)我们可以维护一个变量res,用来存放最后一个元音字符
(2)遍历该数组,如果发现字符是元音字符就先记录一下,赋值给res。然后继续向后查找,再次找到一个元音字符就覆盖res,直到遍历到数组结尾,那么res肯定就是该数组中出现的最后一个元音字符。
九.拆位乘积
给定一个数,把这个数的每一位进行累乘,累乘的和如果小于10就继续拆位累乘,直到累成和小于10为止。
样例输入
123456789
样例输出
362880
2304
24
8
10.公约移动
数据
输出格式
输出一行包含一个整数,表示答案。
样例输入
3 4
3 6 5 5
2 4 3 5
7 8 3 8
3 2
样例输出
5
评测用例规模与约定
对于50%的评测用例,1 <= n, m <= 100,方格图中的每个数不超过 10**5 (10的5次方)。
对于所有评测用例,1 <= n, m <= 1000,方格图中的每个数不超过 10**9 (10的9次方)。
思想
这道题我们可以分为两个部分,一个是主体:也就是我们的 dfs暴搜部分,另一部分是求公约数部分。
刚开始我是这样写的,蹦了:
其实是因为定义了a ,vis数组,但是却没有开辟空间导致的:
十一. 最大区间和
数据
样例输入
6 3
2 3 9 1 9 5
样例输出
19
范围
评测用例规模与约定
对于 30% 的评测用例,1 <= k <= n <= 30,1 <= a[i] <= 100。
对于 60% 的评测用例,1 <= k <= n <= 1000,1 <= a[i] <= 10000。
对于所有评测用例,1 <= k <= n <= 100000,1 <= a[i] <= 1000000。
这道题上来我会先想到枚举起点,然后维护一个区间最大和。
枚举起点:
就用给的样例,可以枚举的起点和K有关系:
根据图我们发现可以枚举的起点有: 2 3 9 1
这个范围可以表示为(i,i+k)。
因此我们可以写如下代码:
我们发现这个结果并不对,这是因为temp没有被重置的原因,每枚举一个新的起点的时候,temp都应该被重置,所以temp应该放到循环内部。
这个解法的时间复杂度为O(nk)。如果我们用前缀和的话时间复杂度可以达到O(n),直接少了k倍。
前缀和解法