【题目】

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 生成元/算法竞赛入门经典/数组与字符串的更多相关文章

  1. 【C/C++】例题3-6 环状序列/算法竞赛入门经典/数组和字符串

    [字典序比较] 对于两个字符串,比较字典序,从第一个开始,如果有两位不一样的出现,那么哪个的ASCII码小,就是字典序较小.如果都一样,那么短的小. [题目] 输入一个环状串,输出最小的字典序序列. ...

  2. 【C/C++】习题3-7 DNA/算法竞赛入门经典/数组与字符串

    [题目] 输入m组n长的DNA序列,要求找出和其他Hamming距离最小的那个序列,求其与其他的Hamming距离总和. 如果有多个序列,求字典序最小的. [注]这道题是我理解错误,不是找出输入的序列 ...

  3. 【C/C++】习题3-5 谜题/算法竞赛入门经典/数组和字符串

    [题目] 有一个5*5的网络,恰好有一个格子是空的(空格),其他格子各有一个字母. 指令:A, B, L, R 把空格上.下.左.右的相邻字母移到空格中. [输入] 初始网格和指令序列(以数字0结束) ...

  4. 【C/C++】习题3-4 周期串/算法竞赛入门经典/数组和字符串

    [题目] 如果某个字符串可以由长度为k的字符串重复多次得到,则称该串以k为周期. 输入一个长度不超过80的字符串,输出最小周期. [思路] 暴力求解.依次考察周期1~长度n. 筛选:周期一定是长度n的 ...

  5. 【C/C++】习题3-3 数数字/算法竞赛入门经典/数组和字符串

    [题目] 把前n个(n<=10000)的整数顺序写在一起:123456789101112-- 数一数0~9各出现多少次(输出10个整数,分别是0,1,2,--,9出现的次数) [解答] 暴力求解 ...

  6. 【C/C++】例题 4-2 刽子手游戏/算法竞赛入门经典/函数和递归

    [题目] 猜单词游戏. 计算机想一个单词让你猜,你每次猜一个字母. 如果单词里有那个[字母],[所有该字母会显示出来]. 如果没有那个字母,算猜错一次.[最多只能猜错六次] 猜一个已经猜过的字母也算错 ...

  7. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...

  8. [刷题]算法竞赛入门经典 3-12/UVa11809

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers 代码: //UVa11 ...

  9. [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...

随机推荐

  1. 『与善仁』Appium基础 — 9、补充:C/S架构和B/S架构说明

    目录 1.C/S架构和B/S架构概念 2.C/S结构与B/S架构的区别 3.C/S架构和B/S架构优点和缺点 (1)B/S模式的优点和缺点: (2)C/S模式的优点和缺点: 1.C/S架构和B/S架构 ...

  2. vue如何写组件(script标签引入的方式)

    很多人知道.vue结构的单文件组件形式,不过这种单文件组件的结构如果要加入到现有的jquery项目中就比较麻烦了,那如果我们又想用vue来写模板,又不想引入vue-cli管理,那该怎么来写组件呢?别着 ...

  3. SpringCloud升级之路2020.0.x版-34.验证重试配置正确性(3)

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 我们继续上一节针对我们的重试进行测试 验证针对可重试的方法响应超时异常重试正确 我们可以通 ...

  4. Go语言核心36讲(Go语言实战与应用五)--学习笔记

    27 | 条件变量sync.Cond (上) 前导内容:条件变量与互斥锁 我们常常会把条件变量这个同步工具拿来与互斥锁一起讨论.实际上,条件变量是基于互斥锁的,它必须有互斥锁的支撑才能发挥作用. 条件 ...

  5. 线性规划之单纯形算法矩阵描述与python实现

    声明 本文为本人原创,转载请注明出处.本文仅发表在博客园,作者LightningStar. 问题描述 所有的线性规划问题都可以归约到标准型的问题,规约过程比较简单且已经超出本文范围,不再描述,可以参考 ...

  6. Trivy 容器镜像扫描工具学习

    简介 官方地址:https://github.com/aquasecurity/trivy Trivy是aqua(专注云原生场景下的安全)公司的一款开源工具,之前历史文章也有对aqua的一些介绍. T ...

  7. dart系列之:在dart中使用数字和字符串

    目录 简介 数字 字符串 StringBuffer 总结 简介 要想熟悉一种语言,最简单的做法就是熟悉dart提供的各种核心库.dart为我们提供了包括dart:core,dart:async,dar ...

  8. oracle和mysql的拼接查询

    oracle的 SELECT * FROM sys_user a WHERE 1=1 AND a.company_id || a.login_name IN('3001rddb414') 196676 ...

  9. idea解决Command line is too long. Shorten command line for ServiceStarter or also for Application报错

    找到 .idea\workspace.xml: 找到<component name="PropertiesComponent">,在里面添加<property n ...

  10. 【2020-8-21】【数字游戏】【启发式搜索IDA*】

    有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直到只剩下一个数字位置.下面是一个例子: ...