解法一(暴力获取):

#include<stdio.h>
#include<stdlib.h> int main(void)
{
int n;
int times = ;
int num = ; printf("输入整数n: ");
scanf("%d", &n); for(int i = ; i <= n; i++)
{
for(int temp = i; temp > ; temp = temp / )
{
if(temp % == || temp % == || temp % == || temp % == )
{
times++;
num += i;
break;
}
}
} printf("%d\n", times);
printf("%d\n", num); printf("\n");
system("pause");
}

解法二:

解题计算思路

实现代码:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h> int get_level(int n) // 获取该整数的级别, <10, <100, ....
{
int n_level = ; while(n)
{
n_level++;
n /= ;
} return n_level;
} int get_sum(int level) // 获取 1+ 2+ 3 + 4 + ... 的值
{
int sum = ;
for(int i = ; i < pow(10.0, level - ); i++)
{
sum += i;
}
return sum;
} int main(void)
{
long long **info;
// info[i][j]
// j 代表相应位数的信息, 例如 j = 1代表个位数级, j = 2代表十位数级
// i = 0 存放着总数量和总和
// i = 1 代表对应位数中符合条件的数字的数量
// i = 2 代表对应位数中符合条件的数字的和
int n;
int n_level;
int special_number[] = {, , , }; // 存放那些特殊的值
//获取 1+ 2+ 3 + 4 + ... + 9 的值
int sum; // 存储 1+ 2+ 3 + 4 + ... 的总和值 printf("输入整数n: ");
scanf("%d", &n); n_level = get_level(n); // 建立相应的二维数组
info = (long long **)malloc( * sizeof(long long *));
for(int i = ; i <= ; i++)
{
info[i] = (long long *)malloc((n_level + ) * sizeof(long long));
// 初始化其值为 0
memset(info[i], , (n_level + ) * sizeof(long long));
} // 数值累计
for(int temp_level = ; temp_level <= n_level; temp_level++)
{
sum = get_sum(temp_level);
if(temp_level == )
{
for(int i = ; special_number[i] <= n && i < ; i++)
{//依次加 0, 1, 2, 9
info[][temp_level]++;
info[][temp_level] += special_number[i];
}
}
else{
for(int i = ; i * pow(10.0, temp_level - ) <= n && i < ; i++)
{
if(((i + ) * pow(10.0, temp_level - ) < n) && (i == || i == || i == ))
{// 符合条件时,将该位所有数值都加起来
// 将数值拆开 先计算最高位数上的值的和,再计算除了最高位数上其他的数值和
info[][temp_level] += pow(10.0, temp_level - );
info[][temp_level] += sum + i * pow(10.0, temp_level - ) * pow(10.0, temp_level - );
}
else if((i + ) * pow(10.0, temp_level - ) < n)
{
if(temp_level == )
{
info[][temp_level] += info[][temp_level - ];
info[][temp_level] += info[][temp_level - ] + i * pow(10.0, temp_level - ) * info[][temp_level - ];
}
else
{
info[][temp_level] += info[][temp_level - ] + pow(10.0, temp_level - );
info[][temp_level] += info[][temp_level - ] + i * pow(10.0, temp_level - ) * (info[][temp_level - ] + pow(10.0, temp_level - )) + get_sum(temp_level - );
}
}
else
{// 逐个加
for(int temp_n = i * pow(10.0, temp_level - ); temp_n <= n && temp_n < (i + ) * pow(10.0, temp_level - ); temp_n++)
{
for(int temp = temp_n; temp > ; temp = temp / )
{
if(temp % == || temp % == || temp % == || temp % == )
{
info[][temp_level]++;
info[][temp_level] += temp_n;
break;
}
}
}
}
}
}
} // 将所有总和加起来
for(int temp_level = n_level; temp_level > ; temp_level--)
{
info[][] += info[][temp_level];
info[][] += info[][temp_level];
} // 输出总和结果
printf("%d\n", info[][] - );
printf("%d\n", info[][]); printf("\n");
system("pause");
}

第十届蓝桥杯大赛-特别数的和-C++的更多相关文章

  1. 2019 第十届蓝桥杯大赛软件类省赛 Java A组 题解

    2019 第十届蓝桥杯大赛软件类省赛 Java A组 试题A 题解 ​ 题目最后一句贴心的提示选手应该使用 long (C/C++ 应该使用 long long). ​ 本题思路很直白,两重循环.外层 ...

  2. 第十届蓝桥杯大赛软件类省赛C/C++研究生组 试题I:灵能传输

    在游戏<星际争霸 II>中,高阶圣堂武士作为星灵的重要 AOE 单位,在游戏的中后期发挥着重要的作用,其技能"灵能风暴"可以消耗大量的灵能对一片区域内的敌军造成毁灭性的 ...

  3. 第十届蓝桥杯2019年C/C++ 大学B组省赛试题

    2019年第十届蓝桥杯大赛软件类省赛C/C++大学B组 试题 A:组队 本题总分:5分 [问题描述] 作为篮球队教练,你需要从以下名单中选出 1号位至 5号位各一名球员, 组成球队的首发阵容. 每位球 ...

  4. 2019第十届蓝桥杯C++B组题解(赛后重写的,不确保答案正确性,仅供参考)

    先说一下这次的感受吧,我们考场比较乱,开始比赛了,还有的电脑有故障,(向这些人发出同情),第一次认真参加比赛,真正比赛的时候感觉没有那么正式,很乱,各种小问题,(例如博主就没找到题目在哪里,找到后又不 ...

  5. 2019年第十届蓝桥杯【C++省赛B组】

    试题 A: 组队 本题总分:5 分 作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员,组成球队的首发阵容.每位球员担任 1 号位至 5 号位时的评分如下表所示.请你计算首发阵容 ...

  6. 第十届蓝桥杯JavaC组省赛真题

    试题 A: 求和 本题总分:5 分 [问题描述] 小明对数位中含有 2.0.1.9 的数字很感兴趣,在 1 到 40 中这样的数包 括 1.2.9.10 至 32.39 和 40,共 28 个,他们的 ...

  7. Java实现第十届蓝桥杯旋转

    试题 F: 旋转 时间限制: 1.0s 内存限制: 512.0MB 本题总分:15 分 [问题描述] 图片旋转是对图片最简单的处理方式之一,在本题中,你需要对图片顺时 针旋转 90 度. 我们用一个 ...

  8. Java实现第十届蓝桥杯JavaC组第十题(试题J)扫地机器人

    扫地机器人 时间限制: 1.0s 内存限制: 512.0MB 本题总分:25 分 [问题描述] 小明公司的办公区有一条长长的走廊,由 N 个方格区域组成,如下图所 示. 走廊内部署了 K 台扫地机器人 ...

  9. Java实现第十届蓝桥杯外卖店优先级

    试题 G: 外卖店优先级 时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分 [问题描述] "饱了么"外卖系统中维护着 N 家外卖店,编号 1 ∼ N.每家外卖店 ...

随机推荐

  1. LeetCode 1156. Swap For Longest Repeated Character Substring

    原题链接在这里:https://leetcode.com/problems/swap-for-longest-repeated-character-substring/ 题目: Given a str ...

  2. PostgreSQL Autovacuum和vacuum

    1 基础知识 重点: 如果您的数据库运行了很久,并且从来没有打开过autovacuum,那么请在打开autovacuum之前全库手动运行vacuum analyze(可能要非常久的时间)完全禁用aut ...

  3. 插入排序;至少要比较N(N-1)/2次;N表示元素个数

    <script type="text/javascript"> //冒泡排序:至少要比较N(N-1)/2次:N表示元素个数 function get(){ var nu ...

  4. Ubuntu虚拟机下忘记密码的解决方法

    由于好久没有用虚拟机里的ubuntu系统,导致忘记了密码.试了好多遍,密码都是错的,内心感到崩溃呀.选择只有两个:一个是重装系统,另一个是找回密码.自己不想重装系统只能找回密码了,在网上百度了好多,都 ...

  5. 洛谷 P5408 【模板】第一类斯特林数·行

    传送门 首先,有 \[ x^{\overline n}=\sum_k\begin{bmatrix}{n\\ k}\end{bmatrix}x^{k}\\ \] 那么我们只需要求出\(x^{\overl ...

  6. GSEA 基因集富集分析

    http://software.broadinstitute.org/gsea/index.jsp GSEA(Gene Set Enrichment Analysis)是一种生物信息学的计算方法,用于 ...

  7. TypeError: BlobBuilder is not a constructor

    var BlobBuilder = window.BlobBuilder || window.MozBlobBuilder || window.WebKitBlobBuilder || window. ...

  8. 使用kubectl访问kubernetes集群

    之前访问k8s都是通过token进去dashboard,如下所示.但是现在希望通过kubectl访问k8s,所以还需要进一步的配置. 1. 安装kubectl命令行工具,配置环境变量,环境变量的值指向 ...

  9. Fluent——UDF监测指定点的物理量

    Fluent版本:19.0 Fluent当中提供了监测某一点物理量随迭代次数或者随时间变化的功能,下面我们就介绍如何在UDF当中实现相同的功能,并且UDF更加灵活,通过UDF的方式我们在知道某点运动规 ...

  10. 剑指offer:序列化二叉树

    题目描述: 请实现两个函数,分别用来序列化和反序列化二叉树 思路分析: 这里一开始有点不明白题目的意思.实际上序列化应该指把二叉树用某种编码方式表示,这里一般是字符串的形式.而反序列就是将之前生成的序 ...