例题 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算法基本思想:如果能求出图中某两个顶点之间的最小割,更新答案后合并这两个顶点继续求最小割,到最后就得到答案. 算法步骤: --------------------------- ...
随机推荐
- [Apple开发者帐户帮助]一、开始(1)关于您的开发者帐户
Apple开发人员网站提供了为Apple平台制作出色应用所需的工具和信息.如果您不熟悉Apple平台上的开发,可以免费使用.只需接受Apple开发者协议,即可为您创建一个帐户.使用此帐户下载测试版软件 ...
- MYSQL 数据库命令行终端操作笔记
1.数据库登录: 1.登录本地的MYSQL数据库:mysql -u root -p 2.连接远程主机上的MYSQL数据库:mysql -h 192.168.191.2 -u root -p 123 ...
- c#,Java aes加密
1.c#版本 /// <summary> /// Aes加密解密.c#版 /// </summary> public class BjfxEncryptHelper { /// ...
- swift-delegate(代理)或者block传值
1:delegate或者block传值 import UIKit class ViewController: UIViewController,TestDelegatePassValueDelegat ...
- 20小时掌握网站开发(免费精品htmlcss视频教程)
自己最近研发了一套新的htmlcss教程,并进行了授课实施,视频教程百度云下载链接如下: 视频及案例源码下载地址 本套教程视频需要安装屏幕录像专家软件才能观看,屏幕录像专家下载地址如下: 屏幕录像专家 ...
- Eclipse的菜单简介
在Eclipse工作台的上方提供了菜单栏,该菜单栏包含了实现Eclipse各项功能的命令,并且与编辑器相关,即菜单栏中的菜单项与当前编辑器内打开的文件是关联的.例如,编辑器内没有打开任何文件,那么,将 ...
- android 国际化 横屏(land) 竖屏(port)margin外边距和padding内边距
android 国际化 横屏(land) 竖屏(port) 边距又分为内边距和外边距,即margin和padding.
- 使用Sql Server Management Studio 2008将数据导出到Sql文件中
最近需要将一个Sql Server 2005数据库中的数据导出,为了方便,就希望能导出成Sql文件,里面包含的数据是由Insert 语句组成的. 在Sql Server Management St ...
- Deutsch lernen (04)
1. streng a. 严厉的,严格的 streng gegen sich selbst und gegen andere sein streng auf Ordnung halten 2. ver ...
- SQL Server实现用户注册
用SQL Server注册用户,通过页面输入注册信息,存储到数据库. <form action="zhuChe.jsp" method="post" on ...