版块导航
正在加载中...
客户端APP下载
论文辅导
申博辅导
登录
注册
帖子
帖子
用户
本版
应《网络安全法》要求,自2017年10月1日起,未进行实名认证将不得使用互联网跟帖服务。为保障您的帐号能够正常使用,请尽快对帐号进行手机号验证,感谢您的理解与支持!
24小时热门版块排行榜
>
论坛更新日志
(550)
>
虫友互识
(47)
>
公派出国
(27)
>
导师招生
(15)
>
教师之家
(9)
>
硕博家园
(8)
>
论文投稿
(8)
>
休闲灌水
(6)
>
基金申请
(4)
>
外文书籍求助
(4)
>
考博
(4)
>
论文道贺祈福
(2)
>
文献求助
(2)
>
考研
(2)
>
专业外语
(1)
>
博后之家
(1)
小木虫论坛-学术科研互动平台
»
计算模拟区
»
程序语言
»
其它
»
Euler 工程 第三十六题:
5
1/1
返回列表
查看: 1441 | 回复: 18
只看楼主
@他人
存档
新回复提醒
(忽略)
收藏
在APP中查看
本帖产生 5 个 程序强帖 ,点击这里进行查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖
holmescn
金虫
(正式写手)
程序强帖: 37
应助: 1
(幼儿园)
金币: 1918.8
散金: 275
红花: 1
帖子: 699
在线: 102.6小时
虫号: 913482
注册: 2009-11-26
性别: GG
专业: 凝聚态物性 II :电子结构
★ ★ ★ ★
xzhdty(金币+1): 谢谢参与 2011-07-07 22:55:02
余泽成(金币+3, 程序强帖+1): 鼓励交流! 2011-07-11 20:44:16
Python 穷举:
CODE:
# Project Euler Problem 36
#
def checkBinaryReverse(n):
s = bin(n)[2:]
r = s[::-1]
if r == s:
return True
return False
# 2-, 3-, 4-digits
for x in xrange(1, 10, 2):
# 2-digits
n = int("%d"*2 % (x, x))
if checkBinaryReverse(n):
print n, "=>", bin(n)[2:]
# 3-, 4-digits
for y in xrange(1, 10):
# 3-digits
n = int("%d"*3 % (x, y, x))
if checkBinaryReverse(n):
print n, "=>", bin(n)[2:]
# 4-digits
n = int("%d"*4 % (x, y, y, x))
if checkBinaryReverse(n):
print n, "=>", bin(n)[2:]
# 5-, 6-digits
for z in xrange(1, 10):
# 5-digits
n = int("%d"*5 % (x, y, z, y, x))
if checkBinaryReverse(n):
print n, "=>", bin(n)[2:]
# 6-digits
n = int("%d"*6 % (x, y, z, z, y, x))
if checkBinaryReverse(n):
print n, "=>", bin(n)[2:]
CODE:
15351 => 11101111110111
33 => 100001
313 => 100111001
32223 => 111110111011111
39993 => 1001110000111001
53235 => 1100111111110011
53835 => 1101001001001011
585 => 1001001001
585585 => 10001110111101110001
717 => 1011001101
73737 => 10010000000001001
7447 => 1110100010111
99 => 1100011
速度太快,就不说了。
赞
一下
(2人)
回复此楼
2楼
2011-07-07 17:13:41
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
智能机器人
Robot
(super robot)
我们都爱小木虫
找到一些相关的精华帖子,希望有用哦~
Euler 工程 第四十四题
已经有4人回复
Euler 工程 第四十二题: 三角词
已经有4人回复
Euler 工程 第四十一题
已经有5人回复
Euler 工程 第三十八题
已经有9人回复
Euler 工程 第三十七题
已经有6人回复
Euler 工程 第三十五题:循环质数
已经有16人回复
Euler 工程 第三十二题:pandigital 数
已经有3人回复
Euler 工程 第三十一题: 换零钱
已经有10人回复
Euler 工程 第三十题
已经有12人回复
Euler 工程 第廿九题:有多少不同的项?
已经有30人回复
Euler 工程 第廿八题:旋转矩阵对角线的和
已经有6人回复
Euler 工程 第廿七题:系数的积
已经有15人回复
Euler 工程 第廿六题:最长的循环节
已经有9人回复
Euler 工程 第廿五题:Fibonacci 数列第一个包含1000个数字的项
已经有3人回复
Euler 工程 第廿四题:全排列的第100万项
已经有19人回复
Euler 工程 第廿三题:
已经有16人回复
Euler 工程 第廿二题: 姓的总分
已经有13人回复
Euler 工程 第廿题:100! 的各项和
已经有5人回复
Euler 工程 第十九题:每月第一天是周日的天数
已经有4人回复
Euler 工程 第十八题:三角阵上最大的和
已经有12人回复
Euler 工程第十六题:2的1000次方的各项和
已经有14人回复
Euler 工程 第14题:找最长的数列
已经有9人回复
Euler 工程 第十一题:相邻元素乘积最大
已经有10人回复
Euler 工程 第三题:寻找600851475143的最大质因子
已经有18人回复
点击这里搜索更多相关资源
科研从小木虫开始,人人为我,我为人人
libralibra
至尊木虫
(著名写手)
骠骑将军
程序强帖: 40
应助: 817
(博后)
金币: 12914.1
红花: 64
帖子: 2238
在线: 287.3小时
虫号: 696514
注册: 2009-02-05
专业: 计算机软件
★ ★
小木虫(金币
+0.5
):给个红包,谢谢回帖
dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-10 15:41:59
余泽成(程序强帖+1): 鼓励交流! 2011-07-11 20:45:09
嗯呢,能穷举的还是简单些的
CODE:
IDLE 2.6.6
>>> print sum([_x for _x in xrange(1,1000001) if str(_x)==str(_x)[::-1] and str(bin(_x))[2:]==str(bin(_x))[2:][::-1]])
872187
>>>
[
Last edited by libralibra on 2011-7-7 at 17:27
]
赞
一下
(3人)
回复此楼
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
3楼
2011-07-07 17:25:03
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
sudo
木虫
(正式写手)
程序强帖: 16
应助: 6
(幼儿园)
金币: 1297.6
散金: 1486
红花: 20
帖子: 588
在线: 641小时
虫号: 1211394
注册: 2011-02-24
性别: GG
专业: 文艺美学
★ ★
小木虫(金币
+0.5
):给个红包,谢谢回帖
xzhdty(金币+1): 谢谢参与 2011-07-07 22:55:48
余泽成(程序强帖+1): 鼓励交流! 2011-07-11 20:44:43
贴个暴力的,花哨的
CODE:
#include
#include
static const int deBruijn[32] =
{
0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, \
8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 \
}; //二元五阶deBruijn序列B(2,5):长度为5的子序列在整个序列中循环唯一
int main(){
unsigned int i;
uint32_t v, t;
int bits;
int digits;
for(i=0; i<1000000; i++){
//判定十进制回文
v = i;
t = 0;
while(v){
t = t*10 + v%10;
v /= 10;
}
if(t!=i) continue; //若十进制不是回文跳回
//计算二进制位数
v = i | (i>>1);
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16; //把最高位的1右边全部置为0
bits = deBruijn[(v * 0x07C4ACDDU) >> 27] + 1; //获得二进制表示的i值的位数,0x07C4ACDD是一个32bit的deBruijn序列
//反转无符号整型i的二进制形式,并移动到和原来位数对齐的形式
v = ((i>>1) & 0x55555555) | ((i & 0x55555555) << 1);
v = ((v>>2) & 0x33333333) | ((v & 0x33333333) << 2);
v = ((v>>4) & 0x0F0F0F0F) | ((v & 0x0F0F0F0F) << 4);
v = ((v>>8) & 0x00FF00FF) | ((v & 0x00FF00FF) << 8);
v = ((v>>16) | (v<<16)) >> (32-bits);
//若二进制为回文则输出
if(i==v){
printf("%d\n", i);
}
}
return 0;
}
输出
CODE:
0
1
3
5
7
9
33
99
313
585
717
7447
9009
15351
32223
39993
53235
53835
73737
585585
Process returned 0 (0x0) execution time : 0.031 s
Press any key to continue.
赞
一下
(3人)
回复此楼
8楼
2011-07-07 20:00:07
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
holmescn
金虫
(正式写手)
程序强帖: 37
应助: 1
(幼儿园)
金币: 1918.8
散金: 275
红花: 1
帖子: 699
在线: 102.6小时
虫号: 913482
注册: 2009-11-26
性别: GG
专业: 凝聚态物性 II :电子结构
★ ★
xzhdty(金币+1): 谢谢参与 2011-07-07 22:56:16
dubo(金币+1, 程序强帖+1): 欢迎常来程序语言版讨论 2011-07-12 16:13:17
再show一个C++版吧
CODE:
#include
#include
#include
#include
#include
using namespace std;
bool checkDec(int n) {
string buf, rbuf;
stringstream ss;
// Here convert integer to string
// using stringstream
ss<
>buf;
rbuf = buf;
// reverse is a standard algorithm
// in STL
reverse(rbuf.begin(), rbuf.end());
if (buf == rbuf) {
return true;
}
return false;
}
bool checkBin(int n) {
// Here convert integer to base-2
// string by bitset.to_string()
bitset<32> bin(n);
string str = bin.to_string();
// Delete extra zeros at the beginning
str.erase(str.begin(), str.begin()+str.find('1'));
string rstr = str;
reverse(rstr.begin(), rstr.end());
if (str == rstr) {
return true;
}
return false;
}
int main(int argc, const char *argv[])
{
int sum = 0;
// In order to satisfy binary condition
// the number must be even
for(int i = 11; i < 1000000; i += 2){
if (checkDec(i) && checkBin(i)) {
cout<
sum += i;
}
}
cout << "sum=" << sum << endl;
return 0;
}
赞
一下
(2人)
回复此楼
13楼
2011-07-07 21:04:14
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
holmescn
金虫
(正式写手)
程序强帖: 37
应助: 1
(幼儿园)
金币: 1918.8
散金: 275
红花: 1
帖子: 699
在线: 102.6小时
虫号: 913482
注册: 2009-11-26
性别: GG
专业: 凝聚态物性 II :电子结构
★
dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-12 16:12:07
dubo(程序强帖+1): 2011-07-12 16:12:32
再来个C语言版的:
CODE:
#include
int checkDec(int n) {
int t = 0;
int v = n;
while (v) {
t = 10*t + v%10;
v /= 10;
}
return t == n;
}
int checkBin(int n) {
int len = 31;
int left = 1 << 30;
int right = 1;
int i;
while(!(n & left)) {
len -= 1;
left >>= 1;
}
for(i = 0; i < len/2 + len%2; i++) {
if (((n&left^left) > 0) ^ ((n&right^right) > 0)) {
return 0;
}
left >>= 1;
right <<= 1;
}
return 1;
}
int main(int argc, const char *argv[])
{
int i, sum = 0;
for (i = 1; i < 1000000; i+=2) {
if(checkDec(i) && checkBin(i)) {
printf("%d\n", i);
sum += i;
}
}
printf("sum=%d", sum);
return 0;
}
赞
一下
(2人)
回复此楼
17楼
2011-07-08 14:01:26
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
相关版块跳转
第一性原理
量子化学
计算模拟
分子模拟
仿真模拟
程序语言
我要订阅楼主
holmescn
的主题更新
5
1/1
返回列表
如果回帖内容含有宣传信息,请如实选中。否则帐号将被全论坛禁言
普通表情
龙
兔
虎
猫
高级回复
(可上传附件)
百度网盘
|
360云盘
|
千易网盘
|
华为网盘
在新窗口页面中打开自己喜欢的网盘网站,将文件上传后,然后将下载链接复制到帖子内容中就可以了。
信息提示
关闭
请填处理意见
关闭
确定