蓝桥杯:史丰收速算

*/-->

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

蓝桥杯:史丰收速算

标题:史丰收速算

史丰收速算法的革命性贡献是:从高位算起,预测进位。不需要九九表,彻底颠覆了传统手算!

速算的核心基础是: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

请分析程序流程,填写划线部分缺少的代码。

#include <cstdio>
#include <cstring>

int ge_wei(int a)
{
    if(a % 2 == 0)
    return (a * 2) % 10;
    else
    return (a * 2 + 5) % 10;
}

//计算进位
int jin_wei(char* p)
{
    char* level[] = {
        "142857",
        "285714",
        "428571",
        "571428",
        "714285",
        "857142"
    };

    char buf[7];
    buf[6] = ‘\0‘;
    strncpy(buf,p,6);

    int i;
    for(i=5; i>=0; i--){
        int r = strcmp(level[i], buf);
        if(r<0) return i+1;
        while(r==0){
            p += 6;
            strncpy(buf,p,6);
            r = strcmp(level[i], buf);
            if(r<0) return i+1;
            if(r>0)returni;
        }
    }

    return 0;
}

//多位数乘以 7
void f(char* s)
{
    int head = jin_wei(s);
    if(head > 0) printf("%d", head);

    char* p = s;
    while(*p){
        int a = (*p-‘0‘);
        int x = (ge_wei(a) + jin_wei(p+1)) % 10;
        printf("%d",x);
        p++;
    }

    printf("\n");
}

int main()
{
    f("428571428571");
    f("34553834937543");
    return 0;
}
时间: 2024-08-04 01:46:06

蓝桥杯:史丰收速算的相关文章

代码赏析——史丰收速算

/* 标题:史丰收速算 史丰收速算法的革命性贡献是:从高位算起,预测进位. 不需要九九表,彻底颠覆了传统手算! 速算的核心基础是:1位数乘以多位数的乘法. 其中,乘以7是最复杂的,就以它为例. 因为,1/7 是个循环小数:0.142857..., 如果多位数超过 142857...,就要进1 同理,2/7, 3/7, ... 6/7 也都是类似的循环小数, 多位数超过 n/7,就要进n 下面的程序模拟了史丰收速算法中乘以7的运算过程. 乘以 7 的个位规律是:偶数乘以2,奇数乘以2再加5,都只取

2014年第五届蓝桥杯试题C/C++程序设计B组——史丰收速算

题目描述 史丰收速算法的革命性贡献是:从高位算起,预测进位.不需要九九表,彻底颠覆了传统手算! 速算的核心基础是:1位数乘以多位数的乘法. 其中,乘以7是最复杂的,就以它为例. 因为,1/7 是个循环小数:0.142857...,如果多位数超过 142857...,就要进1 同理,2/7, 3/7, ... 6/7 也都是类似的循环小数,多位数超过 n/7,就要进n 下面的程序模拟了史丰收速算法中乘以7的运算过程. 乘以 7 的个位规律是:偶数乘以2,奇数乘以2再加5,都只取个位. 乘以 7 的

史丰收速算

史丰收速算法的革命性贡献是:从高位算起,预测进位.不需要九九表,彻底颠覆了传统手算! 速算的核心基础是:1位数乘以多位数的乘法. 其中,乘以7是最复杂的,就以它为例. 因为,1/7 是个循环小数:0.142857...,如果多位数超过 142857...,就要进1 同理,2/7, 3/7, ... 6/7 也都是类似的循环小数,多位数超过 n/7,就要进n 下面的程序模拟了史丰收速算法中乘以7的运算过程. 乘以 7 的个位规律是:偶数乘以2,奇数乘以2再加5,都只取个位. 乘以 7 的进位规律是

蓝桥杯-标题:算年龄

标题:算年龄 英国数学家德摩根出生于19世纪初叶(即18xx年).他年少时便很有才华.一次有人问他的年龄,他回答说:"到了x的平方那年,我刚好是x岁". 请你计算一下,德摩根到底出生在哪一年.题中的年龄指的是周岁. 请填写表示他出生年份的四位数字,不要填写任何多余内容.#include<stdio.h>#include<math.h>int main(){ int age; int a,b,i,j;//X2-18xx=X; for(i=1;i<100;i+

第五届蓝桥杯C/C++本科B组(真题试做)(1~5)

菜鸡只能报个B组.于是报了第六届的本科B.就找了上届的本科B的题来做做. A: 标题:啤酒和饮料 啤酒每罐2.3元,饮料每罐1.9元.小明买了若干啤酒和饮料,一共花了82.3元. 我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒. 注意:答案是一个整数.请通过浏览器提交答案. 不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等). 对于这种,我直接暴力了. double a=2.3,b=1.9; FOR(j,0,SIZE) FOR(i,0,j) { if(abs(a*i+b*

猫和老鼠 蓝桥杯/手速/暴力练习赛(暴力搜索)

猫和老鼠 蓝桥杯/手速/暴力练习赛 [题目描述] 猫和老鼠在10*10 的方格中运动,例如: *...*..... ......*... ...*...*.. .......... ...*.C.... *.....*... ...*...... ..M......* ...*.*.... .*.*...... C=猫(CAT) M=老鼠(MOUSE) *=障碍物 .=空地 猫和老鼠每秒中走一格,如果在某一秒末他们在同一格中,我们称他们“相遇”. 注意,“对穿”是不算相遇的.猫和老鼠的移动方式相

2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告

2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh童鞋的提醒. 勘误2:第7题在推断连通的时候条件写错了,后两个if条件中是应该是<=12 落了一个等于号.正确答案应为116. 1.煤球数目 有一堆煤球.堆成三角棱锥形.详细: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形). -. 假设一共

蓝桥杯 地宫取宝(12&#39;)

X 国王有一个地宫宝库.是n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大, 小明就可以拿起它(当然,也可以不拿). 当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明. 请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝. [数据格式] 输入一行 3个整数,用空格分开:n m

第五届蓝桥杯全国软件设计大赛--2013年校内选拔赛Java题目

第五届蓝桥杯全国软件设计大赛 2013年校内选拔赛Java题目 一.考生注意: (1)[结果填空题]要求参赛选手根据题目描述直接填写结果.求解方式不限.不要求源代码. 把答案存入[考生文件夹]下对应题号的文件中即可. (2)[代码填空题]要求参赛选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确.完整.所填写的代码不超过一条语句(即中间不能出现分号). 把填空的答案(仅填空处的答案,不包括题面已存在的代码)存入[考生文件夹]下对应题号的文件中中即可. (3)[编程题]要求选手设计