#include<bits/stdc++.h>
using namespace std;
int cnt_one(int num){
int cnt=0;
while(num>0){
if(num%2==1)cnt++;
num=num/2;
}
return cnt;
}
int find_min(int n){
int t=cnt_one(n);
int m=n+1;
while(true){
if(cnt_one(m)==t)return m;
m++;
}
}
int main(){
int n;
while(cin>>n){
if(n==0)break;
int result=find_min(n);
cout<<result<<"\n";
}
return 0;
}
2、书架
cpp复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=2e4+5;
int main(){
int n,b;
cin>>n>>b;
int a[N];
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
reverse(a+1,a+n+1);
int sum=0;
int cnt=0;
for(int i=1;i<=n;i++){
sum+=a[i];
cnt++;
if(sum>=b)break;
}
cout<<cnt<<endl;
return 0;
}
3、加勒比海盗船
cpp复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5;
int main(){
int m;
cin>>m;
while(m--){
int c,n;
cin>>c>>n;
int a[N];
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
int sum=0;
int cnt=0;
for(int i=1;i<=n;i++){
if(sum+a[i]>c)break;
sum+=a[i];
cnt++;
}
cout<<cnt<<endl;
}
return 0;
}
4、阿里巴巴与四十大盗
cpp复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5;
struct bao_wu{
int w,v;
double p;
}bw[N];
int cmp(bao_wu a,bao_wu b){
return a.p>b.p;
}
int main(){
int n,c;
cin>>n>>c;
double sum=0;
for(int i=0;i<n;i++){
cin>>bw[i].w>>bw[i].v;
bw[i].p=(double)bw[i].v/bw[i].w;
}
sort(bw,bw+n,cmp);
for(int i=0;i<n;i++){
if(bw[i].w<=c){
sum+=bw[i].v;
c-=bw[i].w;
}
else{
sum+=(double)c*bw[i].p;
c=0;
break;
}
}
printf("%.1lf\n",sum);
return 0;
}
5、看电视---会议安排
cpp复制代码
#include<bits/stdc++.h>
using namespace std;
struct meeting{
int s,e;
}a[105];
int cmp(meeting a,meeting b){
return a.e<b.e;
}
int main(){
int last,n;
int sum;
while(cin>>n){
if(n==0)break;
for(int i=0;i<n;i++){
cin>>a[i].s>>a[i].e;
}
sort(a,a+n,cmp);
sum=1;
last=a[0].e;
for(int i=0;i<n;i++){
if(a[i].s>=last){
sum++;
last=a[i].e;
}
}
cout<<sum<<endl;
}
return 0;
}
6、三角形的个数
cpp复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int cnt=0;
for(int i=1;i<=n/3;i++){
for(int j=i;j<=(n-i)/2;j++){
int k=n-i-j;
if(i+j>k)cnt++;
}
}
cout<<cnt<<endl;
return 0;
}
7、我的猜想
复制代码
#include<bits/stdc++.h>
using namespace std;
bool is_prime(int num){
if(num<2)return false;
if(num==2)return true;
if(num%2==0)return false;
for(int i=3;i<=sqrt(num);i++){
if(num%i==0)return false;
}
return true;
}
int main(){
int n;
while(cin>>n){
int m=n-2;
if(is_prime(m)){
cout<<"yes"<<endl;
}
else{
cout<<"no"<<endl;
}
}
return 0;
}
8、开关灯
cpp复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5;
int main(){
int n;
int a[N];
while(cin>>n){
for(int i=1;i<=n;i++){
cin>>a[i];
}
int cnt0=0;
int cnt1=0;
for(int i=1;i<=n;i++){
if(a[i]!=(i%2))cnt0++;
if(a[i]!=(1-(i%2)))cnt1++;
}
int min_cnt=min(cnt0,cnt1);
cout<<min_cnt<<endl;
}
return 0;
}
9、火柴棒等式
cpp复制代码
#include<bits/stdc++.h>
using namespace std;
int a[]={6,2,5,5, 4, 5, 6, 3, 7, 6};
int shumu(int num){
if(num==0){
return a[0];
}
int cnt=0;
while(num>0){
int gewei=num%10;
cnt+=a[gewei];
num=num/10;
}
return cnt;
}
int main(){
int n;
cin>>n;
int t=n-4;
int result=0;
for(int A=0;A<=1000;A++){
int a_cnt=shumu(A);
if(a_cnt>t)continue;
for(int B=0;B<=1000;B++){
int b_cnt=shumu(B);
int c=A+B;
int c_cnt=shumu(c);
if(a_cnt+b_cnt+c_cnt==t){
result++;
}
}
}
cout<<result<<endl;
return 0;
}
10、比例简化
cpp复制代码
#include<bits/stdc++.h>
using namespace std;
int gcd(int x, int y) {
while(y!=0){
int t=x%y;
x=y;
y=t;
}
return x;
}
int main(){
long long a,b;
int l;
cin>>a>>b>>l;
double target = (double)a / b;
int best_a=l, best_b=1;
double min_diff=1e18;
for(int i=1;i<=l;i++){
for(int j=1;j<=l;j++){
if(gcd(i,j)!=1) continue;
double current = (double)i / j;
if(current < target) continue;
double diff = current - target;
if(diff < min_diff || (diff == min_diff && i < best_a)){
min_diff = diff;
best_a = i;
best_b = j;
}
}
}
cout<<best_a<<" "<<best_b<<endl;
return 0;
}
11、波浪数
cpp复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e7+5;
static int c[N] = {0};
int x,y,a,b,k;
int len(int n, int base){
int cnt=0;
if(n == 0) return 1;
while(n){
n = n / base;
cnt++;
}
return cnt;
}
int make(int a_num, int b_num, int len_num, int base){
int res=0;
for(int i=1;i<=len_num;i++){
if(i%2==1) res = res * base + a_num;
else res = res * base + b_num;
}
return res;
}
void dodo(int base){
int l = len(a, base);
int r = len(b, base);
for(int i=1;i<base;i++){
for(int j=0;j<base;j++){
if(i==j) continue;
for(int curr_len=l;curr_len<=r;curr_len++){
int num = make(i, j, curr_len, base);
if(num >= a && num <= b){
if(num < N) c[num]++;
}
}
}
}
}
int main(){
cin>>x>>y>>a>>b>>k;
for(int i=x;i<=y;i++){
dodo(i);
}
for(int i=a;i<=b;i++){
if(c[i]==k) cout<<i<<endl;
}
return 0;
}
12、假银币
cpp复制代码
#include<bits/stdc++.h>
using namespace std;
int check(char c,int t,char left[3][7],char right[3][7],char result[3][5]){
for(int i=0;i<3;i++){
int left_has=strchr(left[i],c)!=NULL;
int right_has=strchr(right[i],c)!=NULL;
if(strcmp(result[i],"even")==0){
if(left_has||right_has)return 0;
}
else if(strcmp(result[i],"up")==0){
if(t){
if(!right_has)return 0;
}
else{
if(!left_has)return 0;
}
}
else if(strcmp(result[i],"down")==0){
if(t){
if(!left_has)return 0;
}
else{
if(!right_has)return 0;
}
}
}
return 1;
}
int main(){
int n;
cin>>n;
while(n--){
char left[3][7],right[3][7],result[3][5];
for(int i=0;i<3;i++){
cin>>left[i]>>right[i]>>result[i];
}
char c;
for(c='A';c<='L';c++){
if(check(c,1,left,right,result)){
printf("%c is the counterfeit coin and it is light.\n",c);
break;
}
if(check(c,0,left,right,result)){
printf("%c is the counterfeit coin and it is light.\n",c);
break;
}
}
}
return 0;
}
13、索道
cpp复制代码
#include<bits/stdc++.h>
using namespace std;
int lanche_bh(int a,int b){
int result=(a+b-1)/b;
return result;
}
int main(){
int r,g,b;
cin>>r>>g>>b;
int max_time=0;
int red_car=lanche_bh(r,2);
for(int i=1;i<=red_car;i++){
int time1=(i-1)*3+0;
int time2=time1+30;
if(time2>max_time){
max_time=time2;
}
}
int green_car=lanche_bh(g,2);
for(int i=1;i<=green_car;i++){
int time1=(i-1)*3+1;
int time2=time1+30;
if(time2>max_time){
max_time=time2;
}
}
int blue_car=lanche_bh(b,2);
for(int i=1;i<=blue_car;i++){
int time1=(i-1)*3+2;
int time2=time1+30;
if(time2>max_time){
max_time=time2;
}
}
cout<<max_time<<endl;
return 0;
}