蓝桥杯每日一练:3n+1问题、Hello, world!、字符逆序、时间转换、矩形面积交

3n+1问题:

 对于任意大于1的自然数n,若该数为偶数则将其变为原来的一半,若为奇数则将其变为3n+1。反复进行上述过程,直到结果为1时停止。这就是著名的“3n+1”问题。要求输入n,输出按“3n+1”规则变换到1所需要的数字变换次数。(n<=10^9)

这个只能输出一行的结果,不能实现多行输入输出。

#include<stdio.h>

int main(){
	int a,b,max=0,count,p;
	scanf("%d %d",&a,&b); 
	for(int i=a; i<=b; i++){
		p=i;
		count=0;
		while(p>1){
			if(p%2==0){
			p=p/2;
			}
			else{
			p=p*3+1;
			}
			count++;	
		}
		if(count>max){
			max=count;
		}	
	}
	printf("%d %d %d",a,b,++max);
	return 0;
} 

当需要n组输入输出的时候,用while(n--){scanf("%d %d",&a,&b)l;printf("%d%d",a,b);}

当需要多组输入输出的时候,但n未知时,while(scanf("%d %d",&a,&b)!=EOF)

max=0要放在while后和if前保证找出a-b之间的最大max

#include<stdio.h>

int main(){
	int a,b,max,count,p;
	while((scanf("%d %d",&a,&b))!=EOF){
		max=0;
	for(int i=a; i<=b; i++){
		p=i;
		count=0;
		while(p>1){
			if(p%2==0)
			p=p/2;
			else
			p=p*3+1;
			count++;	
		}
		if(count>max)
			max=count;	
	}
	printf("%d %d %d\n",a,b,++max);
    }
	return 0;
} 

 

 

 

问题 1083: Hello, world!

有个问题不明白,百度了,数字怎么转换ASCII码 char c = char(数字)  把数字转换为字符型 

#include<stdio.h>

int main(){
	int i;
	while(scanf("%d",&i)!=EOF){
		char c = (char)i;
		printf("%c",i);
	}
	return 0;
}

问题 1093:字符逆序

scanf不能接受空格、制表符等,gets()可以,并且strlen可以计算出一个字符串中包含空格等字符直至字符串结束 。

#include<stdio.h>
#include<string.h>

int main(){
	int n;
	char s[40];
	gets(s);
	n=strlen(s);
	for(int i=n-1; i>=0; i--){
		printf("%c",s[i]);
	}
	return 0;
}

问题:1470 时间转换

这题不知道意义在那,蓝桥杯又不会出这么简单的题,服气。

#include<stdio.h>

int main(){
	int t,h,m,s;
	scanf("%d",&t);
	h=t/3600;
	m=(t-h*3600)/60;
	s=t-h*3600-m*60;
	printf("%d:%d:%d",h,m,s);
	return 0;
}

 问题1471:矩形面积交

这个m2>m1 && n2>n1很重要,m1,n1是左上角的点,m2,n2是右上角的点

#include<stdio.h>
#define max(x,y) (x>y?x:y)
#define min(x,y) (x<y?x:y)

int main(){
	double s;
	double x1,x2,x3,x4,y1,y2,y3,y4,m1,n1,m2,n2;
	scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);
	scanf("%lf %lf %lf %lf",&x3,&y3,&x4,&y4);
	m1=max(min(x1,x2),min(x3,x4));
	n1=max(min(y1,y2),min(y3,y4));
	m2=min(max(x1,x2),max(x3,x4));
	n2=min(max(y1,y2),max(y3,y4));
	if(m2>m1 && n2>n1)
		printf("%.2f",(m2-m1)*(n2-n1));
	else
		printf("0.00");
	return 0;
}

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值