解法一(暴力获取):

#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. js json 排序

    /* json:需要排序的json key:排序项 */ function JsonSort(json, key) { //console.log(json); for (var j = 1, jl ...

  2. Numpy | 15 数学函数

    NumPy 包含大量的各种数学运算的函数,包括三角函数,算术运算的函数,复数处理函数等. 三角函数 NumPy 提供了标准的三角函数:sin().cos().tan(). import numpy a ...

  3. 用户管理命令——useradd、paaswd、who、w

    1.useradd和passwd命令: 其中:useradd用来添加用户,passwd用来添加用的的密码: 用户创建后可以用用户名和密码进行登录. 2.passwd:密码的更改: (1)普通用户: 只 ...

  4. Python-内存泄漏 持续增长 检查点

    仅个人目前遇见的内存问题, 可能不适用所有问题 一下只是简单的实例代码, 可能跑不起来, 只是看看 可变变量参数 小例子: def foo(a, b=[]): b.append(a) print b ...

  5. Nginx服务器作反向代理实现内部局域网的url转发配置

    情景 由于公司内网有多台服务器的http服务要映射到公司外网静态IP,如果用路由的端口映射来做,就只能一台内网服务器的80端口映射到外网80端口,其他服务器的80端口只能映射到外网的非80端口.非80 ...

  6. Android Studio 之 SharedPrefences 数据持久性保存

    SharedPreferences 会在应用包目录中生成一个xml文件,将数据保存在里面 可以实现数据持久性保存. 创建的数据,保存在 Data -> Data -> 包名 -> s ...

  7. Linux中git用https连接时不用每次输入密码

    应用场景: 比如每天凌晨执行crontab对应的项目部署脚本(使用git作为项目的版本控制). 如果不这样做会怎么样? 每次部署都要git clone并输入对应的用户名和密码,需要人工.这样就显得很不 ...

  8. hdu2094产生冠军[STL set]

    目录 题目地址 题干 代码和解释 参考 题目地址 hdu2094 题干 代码和解释 题意可以这样理解:一个人只要没输过就可以是冠军,如果没输过的人恰为一位,那就认他为冠军,若少于或多于一位,则判定没有 ...

  9. 混合高斯分布与 EM 算法

    极大似然估计在混合高斯分布中遇到的困难 在一般的情况下,对于所得到的样本集,\(X=\left\{x_{1}, \dots, x_{N}\right\}\),我们的目标是最大化似然函数,通过最大化似然 ...

  10. Pandas 与 Numpy 常用方法总结

    Lambda 函数实现 简单的说,lambda 就是一个函数,但是这个函数没有名字,所以我们介绍一下这个函数的调用形式,参数与返回值的实现. lambda 的格式如下: lambda [arg1 [, ...