NOIP信息奥赛--1995“同创杯”初中复赛题题解(三)
生活随笔
收集整理的這篇文章主要介紹了
NOIP信息奥赛--1995“同创杯”初中复赛题题解(三)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
NOI’95 “同創(chuàng)杯”全國青少年信息學(xué)(計(jì)算機(jī))奧林匹克競(jìng)賽
分區(qū)聯(lián)賽復(fù)賽測(cè)試數(shù)據(jù)(初中組)
第三題
輸出結(jié)果為: A類=538 B類=462
本題解析:本題的關(guān)鍵是要計(jì)算二進(jìn)制數(shù)中0和1的個(gè)數(shù)。具體代碼如下:
#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); //計(jì)算得到二進(jìn)制數(shù)中1的個(gè)數(shù)result_0 = getBits(i)-result_1; //計(jì)算得到二進(jìn)制數(shù)中0的個(gè)數(shù)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(); }//統(tǒng)計(jì)二進(jìn)制數(shù)中“1”的個(gè)數(shù),用如下代碼 int getOne(int value) {int cnt = 0;while(value){cnt++;//消除所有1,變成0value = value & (value - 1);}return cnt; }//判斷二進(jìn)制數(shù)的位數(shù) 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; }//統(tǒng)計(jì)二進(jìn)制數(shù)中“0”的個(gè)數(shù),用如下代碼 int getZero(int value) {int cnt = 0;while(value+1){cnt++;//消除所有0,變成1value = value | (value + 1);}return cnt; }總結(jié)
以上是生活随笔為你收集整理的NOIP信息奥赛--1995“同创杯”初中复赛题题解(三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NOIP信息奥赛--1995“同创杯”初
- 下一篇: NOIP信息奥赛--1995“同创杯”初