タイトル説明
パーティーメンバーの課外生活を充実させるために、アカデミーは強い国の知識を学ぶコンテストを組織しました。コンテストの採点ルールは、各プレーヤーに10点の開始スコアがあり、コンテストの参加者が10の質問(1〜10の番号が付けられている)に回答する必要があることです。 、正解です。現在のスコアが2倍になり、間違っている場合は、同じ質問番号のスコアが差し引かれます。入力
最初の行には整数M(1 <= M <100)があり、Mセットのテストデータがあることを意味します。次に、各行にスコアスコア(0≤score≤100)が入ります。
アウトプット
観戦していないと仮定し、スコアごとに状況の数を出力し、状況がなければ-1を出力してください。(ヒント:0がプレイヤーの間違った質問を表し、1がプレイヤーの正しい質問を表し、プレイヤーの最終スコアが90の場合、次の2つの状況が
考え
られます1110000010 0001110110)入力例
3 68 63 100出力例
7 -1 3
元のタイトルリンク:面白いゲーム
観察:
0000000000-> 0
0000000001-> 1
0000000010-> 2
…
1111111111-> 1023
すべてのケースを取得し、各ケースが入力されたスコアを満たすかどうかを判断するには、0〜1023をトラバースするだけです。
- 1. 10進数を2進数に把握します(毎回%2)。
- 2.正面の空席を0で埋める必要があります(全体が0に設定され、背面から%2を挿入した結果)
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int main() {
int m;
cin>>m;
int a[10];
while(m--) {
int score;
cin>>score;
int cnt=0;
for(int i=0; i<=1023; i++) {
memset(a,0,sizeof(a));
int p=9;
int t=i;
while(t) {
a[p--]=t%2;
t/=2;
}
int s = 10;
for(int j=0; j<10; j++) {
if(a[j]==0) s-=(j+1);
else s*=2;
}
if(score==s) cnt++;
}
if(cnt==0) cout<<-1<<endl;
else cout<<cnt<<endl;
}
return 0;
}