第十届蓝桥杯大赛-特别数的和-C++

解法一(暴力获取):
#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++的更多相关文章
- 2019 第十届蓝桥杯大赛软件类省赛 Java A组 题解
2019 第十届蓝桥杯大赛软件类省赛 Java A组 试题A 题解 题目最后一句贴心的提示选手应该使用 long (C/C++ 应该使用 long long). 本题思路很直白,两重循环.外层 ...
- 第十届蓝桥杯大赛软件类省赛C/C++研究生组 试题I:灵能传输
在游戏<星际争霸 II>中,高阶圣堂武士作为星灵的重要 AOE 单位,在游戏的中后期发挥着重要的作用,其技能"灵能风暴"可以消耗大量的灵能对一片区域内的敌军造成毁灭性的 ...
- 第十届蓝桥杯2019年C/C++ 大学B组省赛试题
2019年第十届蓝桥杯大赛软件类省赛C/C++大学B组 试题 A:组队 本题总分:5分 [问题描述] 作为篮球队教练,你需要从以下名单中选出 1号位至 5号位各一名球员, 组成球队的首发阵容. 每位球 ...
- 2019第十届蓝桥杯C++B组题解(赛后重写的,不确保答案正确性,仅供参考)
先说一下这次的感受吧,我们考场比较乱,开始比赛了,还有的电脑有故障,(向这些人发出同情),第一次认真参加比赛,真正比赛的时候感觉没有那么正式,很乱,各种小问题,(例如博主就没找到题目在哪里,找到后又不 ...
- 2019年第十届蓝桥杯【C++省赛B组】
试题 A: 组队 本题总分:5 分 作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员,组成球队的首发阵容.每位球员担任 1 号位至 5 号位时的评分如下表所示.请你计算首发阵容 ...
- 第十届蓝桥杯JavaC组省赛真题
试题 A: 求和 本题总分:5 分 [问题描述] 小明对数位中含有 2.0.1.9 的数字很感兴趣,在 1 到 40 中这样的数包 括 1.2.9.10 至 32.39 和 40,共 28 个,他们的 ...
- Java实现第十届蓝桥杯旋转
试题 F: 旋转 时间限制: 1.0s 内存限制: 512.0MB 本题总分:15 分 [问题描述] 图片旋转是对图片最简单的处理方式之一,在本题中,你需要对图片顺时 针旋转 90 度. 我们用一个 ...
- Java实现第十届蓝桥杯JavaC组第十题(试题J)扫地机器人
扫地机器人 时间限制: 1.0s 内存限制: 512.0MB 本题总分:25 分 [问题描述] 小明公司的办公区有一条长长的走廊,由 N 个方格区域组成,如下图所 示. 走廊内部署了 K 台扫地机器人 ...
- Java实现第十届蓝桥杯外卖店优先级
试题 G: 外卖店优先级 时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分 [问题描述] "饱了么"外卖系统中维护着 N 家外卖店,编号 1 ∼ N.每家外卖店 ...
随机推荐
- Linux yum 包 下载地址
yum包网址: http://www.rpmfind.net/linux/rpm2html/search.php?query=yum
- Vue的SEO问题汇总
方式一 思否 https://segmentfault.com/q/1010000011824706 SSR 和 Nuxt.js : https://zh.nuxtjs.org/ https://se ...
- Js更改整页a标签跳转方式
<script> var anchors = document.getElementsByTagName("a"); for(i=0;i<anchors.leng ...
- 洛谷P2607题解
想要深入学习树形DP,请点击我的博客. 本题的DP模型同 P1352 没有上司的舞会.本题的难点在于如何把基环树DP转化为普通的树上DP. 考虑断边和换根.先找到其中的一个环,在上面随意取两个点, 断 ...
- 【luoguP4720】【模板】扩展卢卡斯
快速阶乘与(扩展)卢卡斯定理 \(p\)为质数时 考虑 \(n!~mod~p\) 的性质 当\(n>>p\)时,不妨将\(n!\)中的因子\(p\)提出来 \(n!\) 可以写成 \(a* ...
- mysql 全连接和 oracle 全连接查询、区别
oracle的全连接查询可以直接用full on,但是在mysql中没有full join,mysql使用union实现全连接. oracle的全连接 select * from a full joi ...
- 启动uiautomatorview 提示无法初始化主类
启动uiautomatorview 提示无法初始化主类, 重新安装jdk到1.8版本就好了,就是这么神奇.
- linux 上使用yum 安装openjdk1.8
使用yum查找jdk: yum search java|grep jdk # yum search java|grep jdk ldapjdk-javadoc.noarch : Javadoc for ...
- Leetcode: 43. 接雨水
题目描述: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情 ...
- Ubuntu16.04.1上搭建分布式的Redis集群,并使用C#操作
为什么要集群: 通常为了,提高网站的响应速度,总是把一些经常用到的数据放到内存中,而不是放到数据库中,Redis是一个很好的Cache工具,当然了还有Memcached,这里只讲Redis.在我们的电 ...