• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
陈小喵
博客园    首页    新随笔    联系   管理    订阅  订阅
“找一”分析报告

一、题目要求

n给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
n要求:
n写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数。例如 f(12)  = 5。
n在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。
 

二、设计思路

        设计思路比较简单,即把从1到输入的这个数之间,所有的数都拆分开,拆分成百位数,十位数,个位数等。之后如果出现1,就在计数的树中加一个1。

 

三、源代码

#include<iostream>
using namespace std;

void main()
{
    int i,n,j=1,m;
    
    cout<<"请输入n:"<<endl;
    cin>>n;

    int n1;

    for(i=2;i<=n;i++)
    {
        n1=i;
        while(n1!=0)
        {
            m=n1%10;
             if(m==1)
            { 
                j++;
            }
            n1=n1/10;
        }
    }
    cout<<j<<endl;
}

 

四、结果截图

 

五、实验总结

       其实这次的问题可以用枚举法找规律来解决,我这个方法虽然简单好想,但是这并不是最好的解决方法。今天这个问题,可以用这个方法解决,但是如果有一天,碰到不能用这个解决的问题呢?所以以后不应该老是这一种定性思维,应该多找一些规律从中找出解决方法。

posted on 2015-06-04 12:43  陈小喵  阅读(179)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3