P1005 继续(3n+1)猜想
转跳点:
┗|`O′|┛ 嗷~~,这个该死的猜想又来了,难度升级了,如过没写过 P1001 的建议先去看一下。话不多说,看题。

嗯,这道题就没有那么明确了,呃,也不能这么说,其实也挺明确。就是让你找出在输入样例中出现过但是没有在卡拉兹猜想演算过程中出现过的数。思路也很清晰,不用想的是,如果我们想知道哪个数没有出现,那么就得求出每一个卡拉兹猜想演算的过程出现的数,再记录下来。这个思路代表着我们无法减少卡拉兹计算次数,只能从存储和比较上做优化了,如果我每一个数都用数组把出现过的数都存起来,那么我们不仅浪费空间,而且找未出现的数的时候也十分浪费时间。为了减少时间与空间的成本,我们决定采用计数排序的思想来解决这个问题。
void Callatz(int num)
{
while (num != 1)
{
(num % 2) ? (num = (3 * num + 1) / 2) : (num /= 2);
if (num <= 100)
{
FlagArray[num]++; //
}
}
}
这是计数过程,我们开辟了一个数组,长度大于100,每一步演算过程出现的数都会被 FlagArray[num]++; 所记录 。当我们进行寻找的时候只需要,找出从数组FlagArray的1~n中找到为0 的数即可。
思路比较简单,实现起来有点麻烦
下面是代码:
1 #include <stdio.h>
2 #include <stdlib.h>
3 #define MAX_SIZE 110
4 int FlagArray[MAX_SIZE];
5 void Callatz(int num);
6 int cmp(const void *a, const void *b);
7
8 int main()
9 {
10 int n;
11 int NumsArray[MAX_SIZE], ans[MAX_SIZE];
12 scanf("%d", &n);
13
14 for (int i = 0; i < n; i++)
15 {
16 scanf("%d", &NumsArray[i]);
17 Callatz(NumsArray[i]);
18 }
19 int j = 0;
20 for (int i = 0; i < n; i++)
21 {
22 if (!FlagArray[NumsArray[i]])
23 {
24 ans[j++] = NumsArray[i];
25 printf("%d ", ans[j-1]);
26 }
27 }
28 putchar('\n');
29 qsort(ans, j, sizeof(int), cmp);
30 for (int i = 0; i < j; i++)
31 {
32 printf("%s%d", i ? " " : "", ans[i]);
33 }
34 putchar('\n');
35
36 return 0;
37 }
38
39 void Callatz(int num)
40 {
41 while (num != 1)
42 {
43 (num % 2) ? (num = (3 * num + 1) / 2) : (num /= 2);
44 if (num <= 100)
45 {
46 FlagArray[num]++;
47 }
48 }
49 }
50
51 int cmp(const void *a, const void *b)
52 {
53 return *(int *)b - *(int *)a;
54 }
——算法不易,诸君共勉!
P1005 继续(3n+1)猜想的更多相关文章
- 1001. 害死人不偿命的(3n+1)猜想 (15)
1001. 害死人不偿命的(3n+1)猜想 (15) 较简单,直接代码实现: #include <cstdio> int main() { int n; scanf("%d&qu ...
- PAT 乙级 1005. 继续(3n+1)猜想 (25)
1005. 继续(3n+1)猜想 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情 ...
- PAT乙级 1005. 继续(3n+1)猜想 (25)
1005. 继续(3n+1)猜想 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 卡拉兹(Callatz ...
- PAT乙级 1001. 害死人不偿命的(3n+1)猜想 (15)
1001. 害死人不偿命的(3n+1)猜想 (15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 卡拉兹(Ca ...
- PAT-乙级-1001. 害死人不偿命的(3n+1)猜想 (15)
1001. 害死人不偿命的(3n+1)猜想 (15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 卡拉兹(Ca ...
- 1001. 害死人不偿命的(3n+1)猜想
/* * Main.c * 1001. 害死人不偿命的(3n+1)猜想 * Created on: 2014年8月27日 * Author: Boomkeeper *********测试通过***** ...
- 9-9害死人不偿命的(3n+1)猜想
1001. 害死人不偿命的(3n+1)猜想 (15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 卡拉兹(Ca ...
- PAT (Basic Level) Practice (中文)1001 害死人不偿命的(3n+1)猜想
1001 害死人不偿命的(3n+1)猜想 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 (3n+1) 砍掉一半.这样一直反复砍下去,最后一 ...
- (数学) PTA 1005 继续(3n+1)猜想 (25 分)
1005 继续(3n+1)猜想 (25 分) 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程 ...
随机推荐
- C/C++ — CreateThread 相关 API
使用互斥对象: #include <windows.h> #include <iostream> #define THREADCOUNT 6 HANDLE ghMutex; D ...
- SpringMVC 注解配置
使用注解配置spring mvc (1)spring mvc的配置文件 <?xml version="1.0" encoding="UTF-8"?> ...
- 设计模式课程 设计模式精讲 12-2 适配器模式coding
1 重要 1.1 类适配器和对象适配器最大的区别 2 代码演练 2.1 代码演练1(类适配器模式) 2.2 代码演练2(对象适配模式) 2.3 代码演练3(具体应用场景) 1 重要 1.1 类适配器和 ...
- OPC DA通讯 KEP6.4 DCOM 配置脚本
在OPC DA通讯测试时总是避免不了要配置DCOM,我习惯是在虚拟机中装这些通讯测试软件,每次安装都需要再次手动配置,感觉很是麻烦 因此,查找资料,了解到可以用dcomperm这个软件来在命令行下进行 ...
- Keras入门——(3)生成式对抗网络GAN
导入 matplotlib 模块: import matplotlib 查看自己版本所支持的backends: print(matplotlib.rcsetup.all_backends) 返回信息: ...
- wyh的dp入门刷题笔记
0: 靠前感觉之前dp抄题解都是抄的题解,自己从没有真正理解过dp.wyh下了很大决心从头学dp,于是便有了这篇文章. 1.背包 前四讲01背包&多重背包&完全背包(混合背包) :樱花 ...
- Ajax--jQuery使用Ajax
1.jQuery对Ajax操作进行了封装,在jQuery最底层的方法是$.ajax(),第二层是 load() , $.get() 和 $.post(),第三层是 $.getScript() 和 $. ...
- 面试题23从上到下打印二叉树+queue操作
//本题思路就是层次遍历二叉树,使用一个队列来模拟过程 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *ri ...
- Golang基础之文件操作
目录 文件读取 os.open文件读取 os.open循环读取 bufio文件读取 bufio循环读取 ioutil读取整个文件 文件写入 os.OpenFile文件写入 bufio.NewWrite ...
- spingboot中使用scheduled设置定时任务注意事项
在spring开发过程中经常会遇到需要定时执行的任务,如定时生成报表,定时推送消息等任务. springboot 提供了简单的 @Scheduled 表达式来配置定时任务.该方式默认是单线程的,任务在 ...