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

Posted luoyoooo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[数字逻辑]7-6 A类数 (20分)相关的知识,希望对你有一定的参考价值。

一个二进制数,如果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
", cnt[num]);
28     return 0;
29 }

以上是关于[数字逻辑]7-6 A类数 (20分)的主要内容,如果未能解决你的问题,请参考以下文章

PAT基础级-钻石段位样卷2-7-6 帅到没朋友 (20 分)

《数字逻辑电路》 作业 求解.50分/

PTA乙级 (1049 数列的片段和 (20分))

1049 数列的片段和 (20 分)

7-6 统计工龄 (20 分)

7-6 堆栈操作合法性(20 分)