hdu4814 模拟(黄金分割进制转换)
题意:
给你一个十进制数,让你把他转化成Q进制数,Q是黄金分割比 = (1+√5)/2.
思路:
首先要明确的就是虽然q是实数,但是依然可以转换成q进制数,因为任何数num,都有 num = num * 1 => num = num * q^0,先把所有的数字都放在各位,然后在根据题目的要求吧他转化成所有的数字都是0或者1,不能有两个连续的1,首先题目给了我们两个式子,经过简单转化就能得到这两个式子
Q^n = Q^(n-1) + Q^(n-2)
2*Q^n = Q^(n+1) + Q^(n-2)
这样对于全都转换成0,1,我们可以先把所有的数字num都放在个位,然后在根据
2*Q^n = Q^(n+1) + Q^(n-2)把大于1的数字分解,一直分解到所有数字小于等于1
对于连续的11我们可以Q^n = Q^(n-1) + Q^(n-2)分解连续的1,有一点要注意的就是这两个处理要同时做,因为分解11可能会产生大于1的数字,所以两个一起弄(一起的意思就是while(!ok){处理问题1;处理问题2;}),直到所有的都满足条件就行了。
#include<stdio.h>
#include<string.h>
int main ()
{
int ans[105] ,i ,j;
int n;
while(~scanf("%d" ,&n))
{
memset(ans ,0 ,sizeof(ans));
ans[50] = n;
int mk = 1;
while(mk)
{
mk = 0;
for(i = 2 ;i <= 100 ;i ++)
{
if(ans[i] > 1)
{
ans[i+1] += ans[i] / 2;
ans[i-2] += ans[i] / 2;
ans[i] %= 2;
mk = 1;
}
}
for(i = 1 ;i <= 100 ;i ++)
if(ans[i] && ans[i+1])
{
int tmp = ans[i] < ans[i+1] ? ans[i] : ans[i+1];
ans[i] -= tmp;
ans[i+1] -= tmp;
ans[i+2] += tmp;
}
}
int st ,et;
for(i = 100 ;i >= 1 ;i --)
if(ans[i]) {st = i;break;}
for(i = 1 ;i <= 100 ;i ++)
if(ans[i]) {et = i ;break;}
for(i = st ;i >= et ;i --)
{
if(i == 49)printf(".");
printf("%d" ,ans[i]);
}
puts("");
}
return 0;
}
hdu4814 模拟(黄金分割进制转换)的更多相关文章
- HDU4814——数学,模拟进制转换
本题围绕:数学公式模拟进制转换 HDU4814 Golden Radio Base 题目描述 将一个十进制的非负整数转换成E(黄金分割数)进制的数 输入 不大于10^9的非负整数,处理到文件尾 输出 ...
- C++笔记(7)——一些模拟题:简单模拟、查找元素、图形输出、日期处理、进制转换、字符串处理
以下内容基本来自<算法笔记>,作者为胡凡,建议直接买书看,我这里只是摘抄部分当笔记,不完整的. 简单模拟 就是一类"题目怎么说你就怎么做"的题目.这类题目不涉及算法,只 ...
- 【轻院热身赛】级数求和、进制转换、candy
[题目链接:级数求和] Problem A: 级数求和 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 409 Solved: 240 SubmitSt ...
- JavaSE教程-03Java中分支语句与四种进制转换
一.分支语句 计算机源于生活,程序模拟现实生活,从而服务生活 行为模式 1,起床,刷牙,洗脸,吃早餐,上课,回家,睡觉(顺序性) 2,如果时间不太够,打个滴滴快车,如果时间够,坐个地铁(选择性) 3, ...
- 洛谷P2084 进制转换
题目背景 无 题目描述 今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子就是 : 1*2^4+0*2^3+1*2^2+0*2^1+1*2^0, 那么请你编程实现,将一个M进制的 ...
- Java基础笔记(3) 进制与进制转换
---恢复内容开始--- 进制 在一般生活中,我们一直在应用的十进制,就是逢十进一,而今天我们要接触的是,计算机编程常用的进制!首先我们要知道,计算机内部运算采用的是二进制,也就是逢二进制! 1.什么 ...
- 洛谷——P1143 进制转换
P1143 进制转换 题目描述 请你编一程序实现两种不同进制之间的数据转换. 输入输出格式 输入格式: 输入数据共有三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进 ...
- 暴力/进制转换 Codeforces Round #308 (Div. 2) C. Vanya and Scales
题目传送门 /* 题意:问是否能用质量为w^0,w^1,...,w^100的砝码各1个称出重量m,砝码放左边或在右边 暴力/进制转换:假设可以称出,用w进制表示,每一位是0,1,w-1.w-1表示砝码 ...
- 洛谷 P1143 进制转换
P1143 进制转换 题目描述 请你编一程序实现两种不同进制之间的数据转换. 输入输出格式 输入格式: 输入数据共有三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进 ...
随机推荐
- 一篇文章彻底弄懂Android-MVVM
转: 一篇文章彻底弄懂Android-MVVM 在学习一个技术之前,我们首先要搞清为什么要用它.用它以后会有什么好处,这样我们才能有兴趣的学习下去. 一.为什么要用MVVM? 我为什么要用这个什么MV ...
- 不使用map和set实现LRU——那用List?
遇到一道面试题,不使用map和set实现LRU,要求get的时间复杂度为O(logn),put的时间复杂度不超过O(n).想到了用ArrayList来实现,保存有序的key.然而牵涉add节点,在保证 ...
- POJ-3080(KMP+多个字符串的最长公共子串)
Blue Jeans HDOJ-3080 本题使用的是KMP算法加暴力解决 首先枚举第一个字符串的所有子串,复杂度为O(60*60),随后再将每个子串和所有剩下的m-1个字符串比较,看是否存在这个子串 ...
- mysql从一个表提取数据更新另外一个表(修复表数据的不一致)
目前碰到一个数据不一致的情况,有两张表,一张项目表,一张项目成员表,项目表有个字段是项目工作时间,是项目成员的工作时间汇总.是由于该了逻辑,所以要把数据改成一致. 项目表的大致结构如下. 表名:pro ...
- 记录PHP post提交表单导入mysql中文乱码的问题
记录记录PHP post提交表单导入mysql中文乱码的问题 关于乱码,这是个糟糕的问题!涉及到很多地方 解决思路:程序所涉及的环境字符集不一致导致 mysql出现乱码一般是mysql数据库内部的字符 ...
- 关于 FreeBSD 老版本如何安装软件
关于 FreeBSD 不被支持版本如何安装软件: ALLOW_UNSUPPORTED_SYSTEM=yes写到/etc/ make.conf 如果提示没有make.conf 请手动新建一个文 ...
- 浅析MyBatis(一):由一个快速案例剖析MyBatis的整体架构与运行流程
MyBatis 是轻量级的 Java 持久层中间件,完全基于 JDBC 实现持久化的数据访问,支持以 xml 和注解的形式进行配置,能灵活.简单地进行 SQL 映射,也提供了比 JDBC 更丰富的结果 ...
- springboot整合持久层技术(mysql驱动问题)
java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or represents more tha ...
- golang 并发运算时主线程先运行完,子线程运行没结束的问题记录
代码如下: blocks,err:= mgo.FindBlocks(batch) //获得当前批次下的矿体信息 cubes:= BlockCutting(blocks[0],x,y,z,nest) f ...
- Cookie实现记住密码、自动登录
前端代码 <form id="form" action="xxx" method="post"> <div> < ...