强化阶段 Day 1 算法笔记 3.1简单模拟(1)

目录

1.害死人不偿命的(3n+1)猜想

2.挖掘机技术哪家强

3.A+B 和 C

4.部分A+B 

5.程序运行时间


1.害死人不偿命的(3n+1)猜想

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;



int main(){
	
	int n;
	scanf("%d",&n);
	
	int times = 0;
	while(n!=1){
		if(n%2==0){
			n/=2;
		}else{
			 n = (3*n+1)/2;
		}
		times++;
	}
	
	printf("%d\n",times);

	return 0;
}

2.挖掘机技术哪家强

第一次有一个测试点没通过,是因为我在求得分最高时使用的max_value初始定义为0,导致不能通过极限测试用例。

我猜测有可能只有一个学校参赛,且得分为0。

所以在进行这种求最大值的过程中,初始值一定要设为一个不可能达到的值,我将0改成-1之后就通过了所有测试点

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

const int maxn = 100002;
int school[maxn]={0};

int main(){
	
	int n;
	scanf("%d",&n);
	int id,score,school_num=0;
	for(int i=0;i<n;i++){
		scanf("%d %d",&id,&score);
		school[id]+=score;
		if(id>school_num){
			school_num = id;
		}
	}
	
	int max_id,max_score=-1;//要定义为一个不可能的分数,不可以用0 
	for(int i=1;i<=school_num;i++){
		if(school[i]>max_score){
			max_score = school[i];
			max_id = i;
		}
	}
	
	printf("%d %d",max_id,max_score);
	
	return 0;
}

3.A+B 和 C

我一开始使用的是int,后面两个测试点无法通过。

因为数据大小的原因,要用long long型变量,与之配套的是%lld进行输入和输出

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;
int main(){
	
	int n;
	scanf("%d",&n);
	long long a,b,c;
	for(int i=1;i<=n;i++){
		scanf("%lld%lld%lld",&a,&b,&c);
		if(a+b>c){
			printf("Case #%d: true",i);
		}else{
			printf("Case #%d: false",i);
		}
		if(i!=n){
			printf("\n");
		}
	}
	
	return 0;
}

4.部分A+B 

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

int get_factor(int a,int x){
	int num=0;
	int y;
	while(a!=0){
		if(a%10==x){
			num++;
		}
		a/=10;
	}
	return num;
}

int get_sum(int x,int num){
	int final=0;
	while(num--!=0){
		final = final * 10 + x;
	}
	return final;
}

int main(){
	
	int a,x,b,y;
	scanf("%d%d%d%d",&a,&x,&b,&y);
	
	int sum_value = get_sum(x,get_factor(a,x))+get_sum(y,get_factor(b,y));
	printf("%d",sum_value);
	
	return 0;
}

5.程序运行时间

1.取模的操作必须整数

2。如果可以避免浮点数就避免浮点数

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

int main(){
	
	int x,y;
	scanf("%d%d",&x,&y);
	int gap=y-x;
	
	//防止麻烦,提前判断四舍五入
	if(gap%100<50){
		gap = gap/100;
	}else{
		gap = gap/100+1;
	}
	
	printf("%02d:%02d:%02d",gap/3600,(gap/60)%60,gap%60);
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/aixiaoxiao13/article/details/121678700