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;
}