例题 2-1 aabb 2-2 3n+1问题
例题2-1 aabb
输出全部形如aabb的四位全然平方数(即前两位数字相等,后两位数字也相等)
#include <stdio.h>
#include <stdlib.h>
#include <math.h> int main(int argc, char *argv[])
{
int i, j, n;
double m;
for(i = 1; i <= 9; i++)
for(j = 0; j <= 9; j++)
{
n = i*1100 + j*11;
//n = (i*10+i)*100 + j*10 + j;
m = sqrt(n);
if(floor(m+0.5) == m) printf("%d\n", n);
}
system("PAUSE");
return 0;
} int main(int argc, char *argv[])
{
int x, y;
for(x = 33; x*x <= 9999; x++)
{
y = x*x;
if(y/1000 == y/100%10 && y/10%10 == y%10)
printf("%d\n", y);
}
system("PAUSE");
return 0;
}
总结:1 一组逆向的思维解决同一个问题
2 用变量n = a*1100 + b*11来储存四位数
3 浮点运算会存在误差。在进行浮点数误差时,应考虑到浮点误差 如 floor(m+0.5) == m
例题2-2 3n+1问题
猜想:对于随意大于1的自然数n。若n为奇数,则将n变成3n+1。否则变成一半
经过若干次这种变换。一定会使n变成1.比如3->10->5->16->8->4->2->1 输入n,输出变换的次数。 n≤10^9. 例子输入:3 例子输出:7
#include <stdio.h>
#include <stdlib.h> int main(int argc, char *argv[])
{
unsigned n, count = 0;
scanf("%d", &n);
while(n > 1)
{
if(n % 2 == 1) { n = n + (n+1)/2; count += 2; continue;}
else n >>= 1 ;
count++;
}
printf("%d\n", count); system("PAUSE");
return 0;
}
总结:1 3n+1会溢出
2 一个暂时的解决方式是:由于n为奇数事3*n+1一定是偶数,下一步将其立马除以2.假设将两次操作一起做,能够在一定程度上缓解这个问题。
有兴趣的读者能够试一 试。程序特点,要善于发现。
3 除以2 用右移操作
4 (3n+1)/2不如写做 n + (n+1)/2,降低溢出的可能
例题2-3 阶乘之和
输入n,计算S=1!+2!+3!+……+n!的末6位(不含前导0),n≤10^6
#include <cstdlib>
#include <stdio.h> int main()
{
const int MOD = 1000000;
int n;
long long sum = 0, tem = 1;
scanf("%d",&n); for (int i=1; i<=n; i++)
{
tem = tem*i%MOD ;
sum = (sum+tem)%MOD;
}
printf("%d\n",sum); system("PAUSE");
return EXIT_SUCCESS;
}
总结:1 算术溢出,用每步除MOD的方式来解决
2 本题特性,当n>25时。结果就不变了,善于发现题目特点
例题 2-1 aabb 2-2 3n+1问题的更多相关文章
- - > code vs 3038 3n+1问题(递归)
3038 3n+1问题 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 3n+1问题是一个简单有趣而又没有解决的数 ...
- BIT 树状数组 详解 及 例题
(一)树状数组的概念 如果给定一个数组,要你求里面所有数的和,一般都会想到累加.但是当那个数组很大的时候,累加就显得太耗时了,时间复杂度为O(n),并且采用累加的方法还有一个局限,那就是,当修改掉数组 ...
- STL模板中的map的使用与例题
最近的计分赛,记得自己的都只是过了两题.遇到了两次map,自己在寒假看了一点的map,只知道在字符串匹配的时候可以用的到.但是自己对map的使用还是不够熟练使用,这回在第一次和第二次的计分赛中都遇到可 ...
- 害死人不偿命的(3n+1)猜想
卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步得到n=1.卡拉兹在1950年的世界数 ...
- C语言经典例题100
C语言经典例题100 来源 http://www.fishc.com 适合初学者 ----------------------------------------------------------- ...
- 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中给出了描述.在这个题目里,情 ...
- 1293. 3n+1数链问题 2016 12 23
/* 1293. 3n+1数链问题 Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description 在计算机科学上,有很多类问题是无法解 ...
- 图的全局最小割的Stoer-Wagner算法及例题
Stoer-Wagner算法基本思想:如果能求出图中某两个顶点之间的最小割,更新答案后合并这两个顶点继续求最小割,到最后就得到答案. 算法步骤: --------------------------- ...
随机推荐
- 关于AS使用git的那些奇葩事儿
首先致谢: http://blog.csdn.net/a10615/article/details/52135617, 我们不生产代码, 我们只做大自然的搬运工! 总结 1. 首次无法push问题: ...
- mysql 导入数据库时,报错1840的解决方法
1.现象 在mysql用sql文件导入数据库时,提示ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @ ...
- js date 转化为字符串函数
getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31). getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6). getFullYear() 从 Date 对象 ...
- WM消息大全
消息名 消息值 说明 WM_CREATE 0x0001 应用程序创建一个窗口 WM_DESTROY 0x0002 一个窗口被销毁 WM_MOVE 0x0003 移动一个窗口 WM_SIZE 0x000 ...
- 身份认证防止重放攻击的challenge-response方法
或者叫询问-应答机制. 基于挑战/应答(Challenge/Response)方式的身份认证系统就是每次认证时认证服务器端都给客户端发送一个不同的"挑战"字串,客户端程序收到这个& ...
- java 循环document 通用替换某个字符串或特殊字符
document 生成xml时 报错 XML-20100: (Fatal Error) Expected ';'. 查了半天发现是 特殊字符 & 不能直接转出,需要进行转换,因为是通用方法很 ...
- Entity FrameWork 操作使用详情
Entity FrameWork 是以ADO.net为基础发展的ORM解决方案. 一.安装Entity FrameWork框架 二.添加ADO.Net实体数据模型 三.EF插入数据 using Sys ...
- 【转】虚拟化(五):vsphere高可用群集与容错
vsphere高级功能需要vcenter server和共享存储的支持才能实现.vsphere的高级功能有 vmotion.storage vmotion.vsphere HA.vsphere DRS ...
- PAT_A1109#Group Photo
Source: PAT A1109 Group Photo (25 分) Description: Formation is very important when taking a group ph ...
- 物理cpu与逻辑cpu概述
物理cpu与逻辑cpu概述(本博客属于转载部分内容:主要学习目的用于大数据平台Hadoop之yarn资源调度的配置) 一.yarn资源调度器中主要的资源分类 1.memory(内存) 2. ...