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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

征战蓝桥 —— 2014年第五届 —— C/C++A组第4题——史丰收速算

發布時間:2024/4/30 c/c++ 77 豆豆
生活随笔 收集整理的這篇文章主要介紹了 征战蓝桥 —— 2014年第五届 —— C/C++A组第4题——史丰收速算 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

史豐收速算法的革命性貢獻是:從高位算起,預測進位。不需要九九表,徹底顛覆了傳統手算!速算的核心基礎是:1位數乘以多位數的乘法。其中,乘以7是最復雜的,就以它為例。因為,1/7 是個循環小數:0.142857...,如果多位數超過 142857...,就要進1同理,2/7, 3/7, ... 6/7 也都是類似的循環小數,多位數超過 n/7,就要進n下面的程序模擬了史豐收速算法中乘以7的運算過程。乘以 7 的個位規律是:偶數乘以2,奇數乘以2再加5,都只取個位。乘以 7 的進位規律是: 滿 142857... 進1, 滿 285714... 進2, 滿 428571... 進3, 滿 571428... 進4, 滿 714285... 進5, 滿 857142... 進6請分析程序流程,填寫劃線部分缺少的代碼。 //計算個位 int ge_wei(int a) {if(a % 2 == 0)return (a * 2) % 10;elsereturn (a * 2 + 5) % 10; }//計算進位 int jin_wei(char* mod) {char* level[] = {"142857","285714","428571","571428","714285","857142"};char buf[7];buf[6] = '\0';strncpy(buf,mod,6);int i;for(i=5; i>=0; i--){int tr = strcmp(level[i], buf);if(tr<0) return i+1;while(tr==0){mod += 6;strncpy(buf,mod,6);tr = strcmp(level[i], buf);if(tr<0) return i+1;______________________________; //填空}}return 0; }//多位數乘以7 void f(char* s) {int head = jin_wei(s);if(head > 0) printf("%d", head);char* mod = s;while(*mod){int a = (*mod-'0');int x = (ge_wei(a) + jin_wei(mod+1)) % 10;printf("%d",x);mod++;}printf("\n"); }int main() {f("428571428571");dfs("34553834937543");return 0; }

注意:通過瀏覽器提交答案。只填寫缺少的內容,不要填寫任何多余的內容(例如:說明性文字)

代碼

#include <iostream> using namespace std; //計算個位 int ge_wei(int a) {if(a % 2 == 0)//偶數return (a * 2) % 10;//乘以2保留個位elsereturn (a * 2 + 5) % 10;//奇數,乘以2加上5,保留個位 }//計算進位 int jin_wei(char* mod) {char* level[] = {"142857","285714","428571","571428","714285","857142"};//多位數超過 n/7,就要進nchar buf[7];buf[6] = '\0';strncpy(buf,mod,6);//將mod這個字符串的前6個字符,拷貝到buff中int i;for(i=5; i>=0; i--){int tr = strcmp(level[i], buf);//從后往前,依次level中的串和buff比較if(tr<0)//buff更大 ,得出了進位數=i+1return i+1;while(tr==0){//buff和level[i]相同了mod += 6;//往后偏移6位strncpy(buf,mod,6);//再拷貝6個字符到buff中tr = strcmp(level[i], buf);//再比較if(tr<0) return i+1;//buf更大 // ______________________________; //填空 // //?//buff更小if(tr>0) return i;}}return 0; }//多位數乘以7 void f(char* s)//s代表多位數 {int head = jin_wei(s);//head是s的進位if(head > 0) printf("%d", head);//輸出進位char* mod = s;//拷貝字符串指針while(*mod){//沒有到末尾int a = (*mod-'0');//依次字符轉數字int ge = ge_wei(a);//算出個位int jin = jin_wei(mod + 1);//后續字符串的進位int x = (ge + jin) % 10;//兩者相加取個位printf("%d",x);//打印mod++;//指針后移}printf("\n"); }int main() {f("4285711");f("34553834937543");return 0; }

總結

以上是生活随笔為你收集整理的征战蓝桥 —— 2014年第五届 —— C/C++A组第4题——史丰收速算的全部內容,希望文章能夠幫你解決所遇到的問題。

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