码迷,mamicode.com
首页 > 其他好文 > 详细

[数字逻辑]7-6 A类数 (20分)

时间:2020-01-20 00:16:41      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:pac   size   class   space   ++   code   stream   turn   namespace   

一个二进制数,如果1的个数多于0的个数 ,则称A类数,否则称非A类数。例如:1001,1000为非A类数,1101和1111000为A类数。

16之内对应的二进制数是A类数的为:1,3,5,6,7,11,13,14,15。所以16之内有9个A类数。

对给定的整数,求在该整数范围内有多少个A类数。

输入格式:

输入一些正整数N(N<=400000),一行一个数。以^Z或文件结束符结束输入。

输出格式:

输出对应整数范围内A类数的个数。一行一个数。末尾输出换行符。

输入样例:

在这里给出一组输入。例如:

16
20

输出样例:

在这里给出相应的输出。例如:

9
10

 

思路:同7-3 先将A类数存进一个数组减少时间

 1 #include <iostream>
 2 using namespace std;
 3 #define maxN 400005
 4 int cnt[maxN];
 5 
 6 int main()
 7 {
 8     int i, num, k, len;
 9     cnt[1] = 1;
10     for (i = 2; i < maxN; i++)
11     {
12         num = i;
13         k = 0;
14         len = 0;
15         while (num)
16         {
17             len++;
18             if (num % 2 == 1)
19                 k++;
20             num = num / 2;
21         }
22         cnt[i] = cnt[i - 1];
23         if (k > len / 2)
24             cnt[i] ++;
25     }
26     while (scanf("%d", &num) != EOF)
27         printf("%d\n", cnt[num]);
28     return 0;
29 }

[数字逻辑]7-6 A类数 (20分)

标签:pac   size   class   space   ++   code   stream   turn   namespace   

原文地址:https://www.cnblogs.com/luoyoooo/p/12215747.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!