C算法设计与分析------程序设计代码

1、老师第一问

cpp 复制代码
#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;
}
相关推荐
Filotimo_2 小时前
3.5 排序算法
数据结构·算法·排序算法
一个努力编程人2 小时前
机器学习————GBDT算法
人工智能·算法·机器学习
深圳市恒星物联科技有限公司2 小时前
基于图像识别算法与积水传感器的积水监测预警技术方案
人工智能·算法
liu****2 小时前
1.反向迭代器实现思路
数据结构·c++·反向迭代器·vector·list
HAPPY酷2 小时前
C++ 多文件编程:声明、定义与全局变量的“黄金法则”
c++·python·技术美术
小美单片机2 小时前
Proteus8.9安装保姆级教程
c语言·c++·算法·51单片机·proteus·大一新生
551只玄猫3 小时前
【高级程序设计 实验报告8】MFC菜单和工具栏
c++·mfc·课程设计·实验报告·高级程序设计
white-persist3 小时前
【红队渗透】Cobalt Strike(CS)红队详细用法实战手册
java·网络·数据结构·python·算法·安全·web安全
keep intensify3 小时前
康复训练 3
c++