数“1”游戏

一、实验题目

给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数出其中1的个数。

要求:

1、写一个函数F(N),返回1~N之间出现“1”的个数,例如:F(12)=5;

2、在32位整数范围内,满足条件的“F(N)=n”的最大的N是多少;

二、设计思路

  规律:

     每一位上都只有三种情况:0,1,2-9

     第 i 位(个位算作第0位,十位算作第1位。。。。。):

     0:   Num/(10^(i+1))*(10^i)

     1:     Num/(10^(i+1))*(10^i)+Num%(10^i)+1;

     2-9:  (Num/(10^(i+1))+1)*(10^i)

三、核心源代码

 1 #include<iostream.h>
 2 #include<math.h>
 3
 4 int shu1(int num)
 5 {
 6     int flog=1;//标记计数1的位数(1为个位,10为十位)
 7     int now=0;//当前位数
 8     int low=0;//较低位数
 9     int high=0;//较高位数
10     int count=0;
11
12     while(num/flog!=0)
13     {
14         now=(num/flog)%10;
15         low=num-(num/flog*flog);
16         high=num/(flog*10);
17         if(num<=0)
18             return 0;
19         if(0==now)//当前数字为0时计数
20         {
21             count+=high*flog;
22         }
23         else if(1==now)//当前数字为1时计数
24         {
25             count+=high*flog+low+1;
26         }
27         else
28         {
29             count+=(high+1)*flog;
30         }
31         flog=flog*10;//数字左移一位
32     }
33     return count;
34 }
35 void main()
36 {
37     int num;
38     int max=0;
39     cout<<"请输入要测试的数值:";
40     cin>>num;
41     cout<<"出现“1”的个数为:"<<shu1(num)<<endl;
42 }

四、程序截图:

五、实验总结

在本次试验中,最主要的还是找到数“1”游戏中的规律,找到规律之后,代码程序也就豁然开朗了。

时间: 2024-10-11 02:15:36

数“1”游戏的相关文章

蓝桥杯——说好的进阶之取数博弈游戏(动态规划实现)

今盒子里有n个小球,A.B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断. 我们约定: 每个人从盒子中取出的球的数目必须是:1,3,7或者8个. 轮到某一方取球时不能弃权! A先取球,然后双方交替取球,直到取完. 被迫拿到最后一个球的一方为负方(输方) 请编程确定出在双方都不判断失误的情况下,对于特定的初始球数,A是否能赢? 程序运行时,从标准输入获得数据,其格式如下: 先是一个整数n(n<100),表示接下来有n个整数.

jsp-简单的猜数小游戏

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getS

4.1.6 Grundy数-硬币游戏2

Problem Description: Alice 和 Bob 在玩一个游戏.给定 k 个数字 a1,a2,--,ak.一开始,有n堆硬币,每堆各有 Xi 枚硬币.Alice 和 Bob 轮流选出一堆硬币,从中取出一些硬币.每次所选硬币的枚数一定要在 a1,a2,--,ak 当中.Alice先取,取光硬币的一方获胜.当双方都采取最优策略时,谁会获胜?题目保证a1,a2--中一定有1. 1<=n<=1000000 1<=k<=100 1<=Xi,ai<=10000 In

细数捕鱼游戏软件开发的游戏技巧,趣味性十足遵循经典套路设计

捕鱼游戏作为深海捕鱼游戏从出现就吸引了很多人的目光,并且在随着技术的发展和进步下,手机捕鱼游戏开发也逐渐的愈演愈烈,甚至是成为了当下流行的投资运营选择.其实在手机捕鱼游戏开发下的捕鱼游戏蕴含了许多还没有被玩家了解透彻的游戏技巧,仍然需要玩家在捕鱼游戏中自己慢慢的发现与总结.欢迎咨询电话:15315986100:QQ:3410861822 手机捕鱼游戏开发,华软打造值得玩 谈及捕鱼游戏的游戏技巧很多人都认为捕鱼游戏就是简单的点击屏幕进行发射就好,账户金币没有了就等着系统的补助发放,丝毫不去想如何捕

数1游戏

一.题目: 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数.要求: 1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数.例如 f(12)  = 5.2.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少. 二.设计思想. 分别算出每一位上1出现的次数,再加起来就是总的次数. 三.源程序 #include<iostream.h> #include<math.h> int main() { int num,a[10],

数1 游戏

一.题目: 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数.要求: 1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数.例如 f(12)  = 5.2.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少. 二.设计思想. 分别算出每一位上1出现的次数,再加起来就是总的次数. 三.源程序 #include<iostream.h> #include<math.h> int main() { int num,a[10],

Python猜数小游戏

[游戏规则]生成一个指定范围的随机数(如:1-100),然后玩家输入数值猜答案,屏幕会根据玩家输入的数字给出大小提示,一直到玩家猜出准确答案则游戏胜利并结束. import  random answer=random.randint(1,100) n=int(input("Please input num: ")) while n!=answer :       if n>answer:           n = int(input("Num is Big! Plea

猜数小游戏

1 #include<iostream> 2 #include<stdlib.h> 3 using namespace std; 4 int count = 0; 5 bool judge (int num,int ynum){ 6 if(num == ynum){ 7 cout<<"You got it right in "<<count<<" guesses"<<endl; 8 return

NOIp模拟3 取数游戏

试题描述 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流取数,取数的规则如下: (1)选择硬币左边或者右边的一条边,并且边上的数非0: (2)将这条边上的数减至任意一个非负整数(至少要有所减小): (3)将硬币移至边的另一端. 如果轮到一个玩家走,这时硬币左右两边的边上的数值都是0,那么这个玩家就输了.如下图,描述的是Alice和Bob两人的对弈过程,其