【C/C++】例题3-5 生成元/算法竞赛入门经典/数组与字符串
【题目】
x+x的各位数之和为y,x为y的生成元。
求10万以内的n的最小生成元,无解输出0.
【解答】
这是我根据自己的想法最初写的代码:
#include<cstdio>
#include<cstdlib>
#include<cstring>
const int maxn = 100005;
int list[maxn];
int main(){
int n, m, T;
memset(list,0,sizeof(list));
for(m = 1; m < maxn; m++){ //求m加上m的各个数字之和
int x = 0, y = 0; //直接对m进行操作,y是累加统计
while(m>0){
x = m%10; //最后一位
y += x;
m = m/10; //把最后一位去掉
}
list[m] = y;
}
scanf("%d", &n);
printf("%d",list[n]);
system("pause");
}
【DEBUG】
遇到了问题,无法输入,初步判断是在while循环中死循环了。
【原因】因为在循环中修改了计数器m的值。
【修改】将计数器m的值赋值给内部的新变量。

但是这样求出的还是不对。
为什么呢?仔细一看发现是映射关系不对了。
输入的是数字,输出是生成元,利用数组对应关系,应该数组下标是【生成元+各位数之和】,也就是算出来的y才是数组的下标,这个数组的结构是a[y] = m,查询数组下标y的时候才能返回生成元。并且肯定满足【生成元要小于等于数字】。

再次将y和m修改之后,依然没法得到正确的结果。
比如,我在输入n=216的时候,输出结果是207,但是正确答案是198. 因为207+2+7=216,198+1+9+8=216.
因为在保存list[y]=m的时候,随着m的增大如果得到了同样的y值,会把list[y]给更新。
因为m是递增的,所以只要保证m是第一次被更新进list中就可以。也就是在更新list[y]=m的之前,判断是否list[y]==0。
另外,关于初始化数组为0,在无解时候要求输出0,相当于无解就没有进行存储,自然就是0了。
限制过输入后,输出符合,但是比起题目中给的例程少了m<list[y]的限制条件。
(这个条件我觉得没啥用,看意思是更新数,但是在递增的情况下感觉没有用处。
(另外源码里,while(T--)的写法我觉得很妙。
#include<cstdio>
#include<cstdlib>
#include<cstring>
const int maxn = 100005;
int list[maxn];
int main(){
int n, m, T;
memset(list,0,sizeof(list));
for(m = 1; m < maxn; m++){ //求m加上m的各个数字之和
int x = m, y = m; //直接对m进行操作(是不行的),y是累加统计。用x接受m的值,y用于算总和。
int t;
while(x>0){
t = x%10; //最后一位
y = y + t;
x = x/10; //把最后一位去掉
}
if(list[y] == 0 || m<list[y]) list[y] = m; //后半句感觉没有什么用
}
scanf("%d",&T);
while (T--)
{
scanf("%d",&n);
printf("%d\n",list[n]);
}
system("pause");
}
【C/C++】例题3-5 生成元/算法竞赛入门经典/数组与字符串的更多相关文章
- 【C/C++】例题3-6 环状序列/算法竞赛入门经典/数组和字符串
[字典序比较] 对于两个字符串,比较字典序,从第一个开始,如果有两位不一样的出现,那么哪个的ASCII码小,就是字典序较小.如果都一样,那么短的小. [题目] 输入一个环状串,输出最小的字典序序列. ...
- 【C/C++】习题3-7 DNA/算法竞赛入门经典/数组与字符串
[题目] 输入m组n长的DNA序列,要求找出和其他Hamming距离最小的那个序列,求其与其他的Hamming距离总和. 如果有多个序列,求字典序最小的. [注]这道题是我理解错误,不是找出输入的序列 ...
- 【C/C++】习题3-5 谜题/算法竞赛入门经典/数组和字符串
[题目] 有一个5*5的网络,恰好有一个格子是空的(空格),其他格子各有一个字母. 指令:A, B, L, R 把空格上.下.左.右的相邻字母移到空格中. [输入] 初始网格和指令序列(以数字0结束) ...
- 【C/C++】习题3-4 周期串/算法竞赛入门经典/数组和字符串
[题目] 如果某个字符串可以由长度为k的字符串重复多次得到,则称该串以k为周期. 输入一个长度不超过80的字符串,输出最小周期. [思路] 暴力求解.依次考察周期1~长度n. 筛选:周期一定是长度n的 ...
- 【C/C++】习题3-3 数数字/算法竞赛入门经典/数组和字符串
[题目] 把前n个(n<=10000)的整数顺序写在一起:123456789101112-- 数一数0~9各出现多少次(输出10个整数,分别是0,1,2,--,9出现的次数) [解答] 暴力求解 ...
- 【C/C++】例题 4-2 刽子手游戏/算法竞赛入门经典/函数和递归
[题目] 猜单词游戏. 计算机想一个单词让你猜,你每次猜一个字母. 如果单词里有那个[字母],[所有该字母会显示出来]. 如果没有那个字母,算猜错一次.[最多只能猜错六次] 猜一个已经猜过的字母也算错 ...
- (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...
- [刷题]算法竞赛入门经典 3-12/UVa11809
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers 代码: //UVa11 ...
- [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...
随机推荐
- 如何用命令行编译c++程序
作为程序员,如果仅仅只懂得如何在IDE上拖控件写程序,而不知道如何直接通过编译器编译程序的话.虽然说也没啥大不了的,但是如果掌握了手动编译的技能,那肯定会是一种炫技般的存在.从客观的角度来讲,一方面, ...
- Hi3516开发笔记(一):海思HI3516DV300芯片介绍,入手开发板以及Demo测试
前言 目前主流国产芯片为RV11XX.RK33XX.Hi35XX系列,本系列开启Hi3516系列的开发教程. Hi3516DV300芯片介绍 Hi3516DV300为专业行Smart IP ...
- Django笔记&教程 4-2 模型(models)中的Field(字段)
Django 自学笔记兼学习教程第4章第2节--模型(models)中的Field(字段) 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/ref ...
- python 格式化输出详解(占位符:%、format、f表达式)——上篇 理论篇
0 - 占位符介绍 要实现字符串的拼接,使用占位符是的一种高效.常用的方式. 举个例子,下面是不使用占位符的一种写法,直接使用加号拼接字符串 name = "Li hua" age ...
- CAP 5.2 版本发布通告
前言 今天,我们很高兴宣布 CAP 发布 5.2 版本正式版,在这个版本中,我们主要致力于更好的优化使用体验以及支持新的 Transport,同时在该版本也进行了一些 bug 修复的工作. 自从 5. ...
- SQL Server2019数据库备份与还原脚本,数据库可批量备份
前言 最近公司服务器到期,需要进行数据迁移,而数据库属于多而繁琐,通过图形化界面一个一个备份所需时间成本很大,所以想着写一个sql脚本来执行. 开始 数据库单个备份 数据库批量备份 数据库还原 数据库 ...
- [hdu7012]Miserable Faith
类似于[NOI2021]轻重边的逆过程,操作1即为对$u$执行access(根为1),$dist(u,v)$即为$u$到$v$的虚边数 对前者用LCT维护,并记录轻重边的切换,显然切换总量为$ ...
- 下一代的 3D Tiles 前瞻
下一代的 3D Tiles 前瞻 原文:Introducing 3D Tiles Next, Streaming Geospatial to the Metaverse 原文发布时间:2021年11月 ...
- 【PS】证件照转换背景色
证件照转换背景色 2019-07-14 12:18:49 by冲冲 1. 需求 自由切换证件照的背景颜色(白底.蓝底.红底...) 2. 步骤 ① 双击 图层锁 解锁,弹出的"新建图层0 ...
- Codeforces 566E - Restoring Map(bitset 优化构造)
Codeforces 题目传送门 & 洛谷题目传送门 本来说好的不做,结果今早又忍不住开了道题/qiao 我们称度为 \(1\) 的点为叶节点,度大于 \(1\) 的点为非叶节点. 首先考虑如 ...