日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu4814 模拟(黄金分割进制转换)

發布時間:2025/6/17 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 模拟(黄金分割进制转换)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。