当前位置:
首页 >
NOIP信息奥赛--1995“同创杯”初中复赛题题解(三)
发布时间:2025/3/15
52
豆豆
生活随笔
收集整理的这篇文章主要介绍了
NOIP信息奥赛--1995“同创杯”初中复赛题题解(三)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
NOI’95 “同创杯”全国青少年信息学(计算机)奥林匹克竞赛
分区联赛复赛测试数据(初中组)
第三题
输出结果为: A类=538 B类=462
本题解析:本题的关键是要计算二进制数中0和1的个数。具体代码如下:
#include <QCoreApplication> #include<iostream> using namespace std;int getOne(int value); //int getZero(int value);int getBits(int value);int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);cout<<"hell NOIP!"<<endl;// emun {A = 0,B};int cntA = 0;int cntB = 0;cout<<"the bits of value is: "<<getBits(2)<<endl;for(int i = 1;i<=1000;i++){int result_1 = 0;int result_0 = 0;result_1 = getOne(i); //计算得到二进制数中1的个数result_0 = getBits(i)-result_1; //计算得到二进制数中0的个数if(result_1 > result_0){cntA++;}else{cntB++ ;}}cout<<"the class A in 1 to 1000 is :"<<cntA<<endl;cout<<"the class B in 1 to 1000 is :"<<cntB<<endl;return a.exec(); }//统计二进制数中“1”的个数,用如下代码 int getOne(int value) {int cnt = 0;while(value){cnt++;//消除所有1,变成0value = value & (value - 1);}return cnt; }//判断二进制数的位数 int getBits(int value) {int fv=1;if(value==1){return 1;}for (int i = 1; i < 15; i++) {fv = fv*2;if(fv>value){return i;}else if(fv == value){return i+1;}}return 0; }//统计二进制数中“0”的个数,用如下代码 int getZero(int value) {int cnt = 0;while(value+1){cnt++;//消除所有0,变成1value = value | (value + 1);}return cnt; }总结
以上是生活随笔为你收集整理的NOIP信息奥赛--1995“同创杯”初中复赛题题解(三)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: NOIP信息奥赛--1995“同创杯”初
- 下一篇: NOIP信息奥赛--1995“同创杯”初