一、题目:

n给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
n要求:
n写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数。例如 f(12)  = 5。
n在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。
二、解题思路:
无。
三、程序源码:
import java.util.*;
public class main { public static void main(String[] args) {
// TODO Auto-generated method stub
int num;
Scanner S=new Scanner(System.in);
System.out.print("请输入数字:");
num=S.nextInt();
System.out.print(num+"中出现数字1的个数为:");
System.out.println(Count(num));
for(int i=32767;i>0;i++)
{
if(Count(i)==i)
{
System.out.print("满足条件的“f(N) =N”的最大的N是"+i);
break;
}
}
}
static int Count(int n)
{
int count=0;
int factor=1;
int LowerNum=0;
int CurNum=0;
int HigherNum=0;
while (n/factor!=0)
{
LowerNum=n-(n/factor)*factor;
CurNum=(n/factor)%10;
HigherNum=n/(factor*10);
switch (CurNum)
{
case 0:
count=count+HigherNum*factor;
break;
case 1:
count=count+HigherNum*factor + LowerNum +1;
break;
default:
count=count+(HigherNum+1)*factor;
break;
}
factor=factor*10;
}
return count;
} }

四、程序运行截图:

五、个人总结:

这次程序自己首先想到的是把1—N的每个数里边的1数一遍。但这不是最有效的办法,自己想的方法又实现不出来,在网上找了好多资料,只有上面的这种方法自己可以理解,因此就抄袭了下来。这个程序是根据如下规律写出来的:

1.一位十进制数:当N>=1时,f(N)=1;当N=0时,f(N)= 0;

   2.两位十进制数:f(13)=个位出现1的个数+十位出现1的个数=2+4=6;
          f(23)=个位出现1的个数+十位出现1的个数=3+10=13;
          ......
          f(93)=个位出现1的个数+十位出现1的个数=10+10=20;
   3.三位十进制数:f(123)=个位出现1的个数+十位出现1的个数+百位出现1的个数=13+20+24=57;    
   4.f(abcde),计算c位上的1的个数,需要看ab、c、de的情况:
   当c=0时,受高位影响,百位上出现1的个数为:(ab)*100
   当c=1时,受高位和低位影响,百位上出现1的个数为:(ab)*100+((cde)+1)
   当c>1时,受高位影响,百位上出现1的个数为:((ab)+1)*100
自己理解的不是很到位,但是可以明白基本的意思,对自己无语。

给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。的更多相关文章

  1. 课堂练习:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。

    题目 1 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 2 要求: (1) 写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数.例如 f(12)  ...

  2. 给定一个十进制数,将其转化为N进制数-----17年滴滴笔试题

    题目:给定一个十进制数M,将其转化为N进制数,其中2<=N<=16,其中N为32为整型数; 输入:M N,如7 2 输出转化结果:111 注意点:考虑负数的情况,记得添加负号(其实直接添加 ...

  3. 给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)

    """ #给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 #返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况) 解题思路: 1.设定一个 ...

  4. 任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0。

    题目:任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0. 解法一:暴力求解.从1开始查找M,然后判断M*N=X这个数字是否只含有0,1. 解法二:由 ...

  5. JAVA 之 每日一记 之 算法( 给定一个正整数,返回它在 Excel 表中相对应的列名称。 )

    题目: 给定一个正整数,返回它在 Excel 表中相对应的列名称. 例如: 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -& ...

  6. 最短路径(给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。)

    给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 例: 输入: [ [1,3,1], [1,5,1], [ ...

  7. 给定一个正整数,实现一个方法求出离该整数最近的大于自身的 换位数 <把一个整数各个数位进行全排列>

    """给定一个正整数,实现一个方法求出离该整数最近的大于自身的 换位数 -> 把一个整数各个数位进行全排列""" # 使用 permu ...

  8. 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。

    谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数. Google2009华南地 ...

  9. 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg, 字符串内的其他字符不改变,给定函数,编写函数 void Stringchang(const char*input,char*output)其中input是输入字符串,output是输出字符串

    import java.util.Scanner; /*** * 1. 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg, 字符串内的其他字 ...

随机推荐

  1. 数据库之redis

    启动redis服务器:sudo redis-server /etc/redis/redis.conf 通过客户端进入,执行命令:redis-cli 测试服务是否可用:ping 查看redis当前状态: ...

  2. goalng nil interface浅析

    0.遇到一个问题 代码 func GetMap (i interface{})(map[string]interface{}){ if i == nil { //false ??? i = make( ...

  3. Mybatis主线流程源码解析

     Mybatis的基础使用以及与Spring的相关集成在官方文档都写的非常详细,但无论我们采用xml还是注解方式在使用的过程中经常会出现各种奇怪的问题,需要花费大量的时间解决. 抽空了解一下Mybat ...

  4. RabbitMQ(二):理解消息通信RabbitMQ

    原文:RabbitMQ(二):理解消息通信RabbitMQ 一.消费者.生产者和信道 生产者(producer):生产者创建消息,然后发布(发送)到代理服务器(RabbitMQ),可以说发送消息的程序 ...

  5. OSG漫游到指定坐标点位置

    OSG中从当前场景位置漫游到指定点坐标位置,osg中场景的视口状态包括如下参数: 1.视点的位置 2.参考点的位置,该点通常为场景中的中心轴上的点 3.视点向上的方向向量 ( const osg::V ...

  6. 洛谷 P4430 小猴打架

    洛谷 P4430 小猴打架 题目描述 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友.每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友.经过N-1次打 ...

  7. Direct3D中 SetStreamSource 函数与数据流

    Microsoft? DirectX? 8.0引入了数据流的概念,用来把数据绑定到着色器使用的输入寄存器.一个数据流是一个成员数据的数组,每个成员由一个或多个元素构成,这些元素代表单个实体,如位置.法 ...

  8. 【转载】MSXML应用总结 开发篇(上)

    原文:http://blog.sina.com.cn/s/blog_48f93b530100ejv9.html 本篇是接前文“MSXML应用总结 概念篇”写的,主要总结一下MSXML DOM接口的应用 ...

  9. CF 1110 E. Magic Stones

    E. Magic Stones 链接 题意: 给定两个数组,每次可以对一个数组选一个位置i($2 \leq i \leq n - 1$),让a[i]=a[i-1]+a[i+1]-a[i],或者b[i] ...

  10. Oracle GUID转换为String

    Oracle中guid属于Raw(16)类型, 查询的时候如果不使用下面的函数, 程序中得到的是数组(byte[]). 在extjs环境下, 会带来数组的反序列化问题(newtonsoft.json) ...