【题目】

x+x的各位数之和为y,x为y的生成元。

求10万以内的n的最小生成元,无解输出0.

【解答】

这是我根据自己的想法最初写的代码:

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<cstring>
  4. const int maxn = 100005;
  5. int list[maxn];
  6. int main(){
  7. int n, m, T;
  8. memset(list,0,sizeof(list));
  9. for(m = 1; m < maxn; m++){ //求m加上m的各个数字之和
  10. int x = 0, y = 0; //直接对m进行操作,y是累加统计
  11. while(m>0){
  12. x = m%10; //最后一位
  13. y += x;
  14. m = m/10; //把最后一位去掉
  15. }
  16. list[m] = y;
  17. }
  18. scanf("%d", &n);
  19. printf("%d",list[n]);
  20. system("pause");
  21. }

【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--)的写法我觉得很妙。

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<cstring>
  4. const int maxn = 100005;
  5. int list[maxn];
  6. int main(){
  7. int n, m, T;
  8. memset(list,0,sizeof(list));
  9. for(m = 1; m < maxn; m++){ //求m加上m的各个数字之和
  10. int x = m, y = m; //直接对m进行操作(是不行的),y是累加统计。用x接受m的值,y用于算总和。
  11. int t;
  12. while(x>0){
  13. t = x%10; //最后一位
  14. y = y + t;
  15. x = x/10; //把最后一位去掉
  16. }
  17. if(list[y] == 0 || m<list[y]) list[y] = m; //后半句感觉没有什么用
  18. }
  19. scanf("%d",&T);
  20. while (T--)
  21. {
  22. scanf("%d",&n);
  23. printf("%d\n",list[n]);
  24. }
  25. system("pause");
  26. }

【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. Oracle 表空间和权限

    表空间 表空间是数据库的逻辑划分,一个表空间只能属于一个数据库.所有的数据库对象都存放在指定的表空间中.但主要存放的是表,所以称作表空间. Oracle中很多优化都是基于表空间的设计理念而实现的,一个 ...

  2. 菜鸡的Java笔记 java数据库编程(JDBC)

    java数据库编程(JDBC)        介绍 JDBC 的基本功能            content (内容)        现在几乎所有的项目开发过程之中都不可能离开数据库,所以在java ...

  3. NodeJS连接MongoDB和mongoose

    1.MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.是世界上目前用的最广泛的nosql数据库 2.noSql 翻译过来 not o ...

  4. JDBC数据库的使用操作总结

    JDBC是一组能够执行SQL语句的API 由于传统的数据库操作方式需要程序员掌握各个不同的数据库的API,极其不便 因此java定义了JDBC这一标准的接口和类,为程序员操作数据库提供了统一的方式 J ...

  5. [loj3347]有趣的旅途

    考虑求出重心,以0为根建树,求出第 $i$个点的子树大小$sz[i]$($a(0,i)$),则满足$n-sz[i]\le \lfloor\frac{n}{2}\rfloor$的$sz[i]$中的最小值 ...

  6. Yarp 让系统内调度更灵活

    简介 Yarp 是微软团队开发的一个反向代理组件, 除了常规的 http 和 https 转换通讯,它最大的特点是可定制化,很容易根据特定场景开发出需要的定制代理通道. 详细介绍:https://de ...

  7. [ Skill ] 图形化组件在注册 User Trigger 时需要注意的事情

    https://www.cnblogs.com/yeungchie/ 使用 deRegUserTriggers 可以用来配置:当打开一个新窗口时,自动集成自定义的菜单.工具栏等等. 使用格式如下: d ...

  8. Atcoder Regular Contest 058 D - 文字列大好きいろはちゃん / Iroha Loves Strings(单调栈+Z 函数)

    洛谷题面传送门 & Atcoder 题面传送门 神仙题. mol 一发现场(bushi)独立切掉此题的 ycx %%%%%%% 首先咱们可以想到一个非常 naive 的 DP,\(dp_{i, ...

  9. Git常用操作(二)

    仓库拉取 git clone XXX 修改仓库链接 $ git config -l # 显示coding列表 $ git config --get remote.origin.url # 返回orig ...

  10. NextPolish对基因组进行polish

    NextPolish由未来组开发对基因组序列进行polish的工具,对三代以及二代均可进行polish. gituhp地址:https://github.com/Nextomics/NextPolis ...