04 第四周--程序设计与算法(一)测验

022:角谷猜想

总时间限制: 1000ms 内存限制: 65536kB

描述
所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。程序要求输入一个整数,将经过处理得到1的过程输出来。

输入
一个正整数N(N <= 2,000,000)

输出
从输入整数到1的步骤,每一步为一行,每一部中描述计算过程。最后一行输出"End"。如果输入为1,直接输出"End"。

样例输入

5

样例输出

5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
End

代码

#include<stdio.h> 
int main()
{
	long long int n;
	scanf("%lld",&n);
	if(n==1)
		printf("End");
	else if(n>0&&n<=2000000){
		do{
			if(n%2==0){
				printf("%lld/2=%lld\n",n,n/2);	
				n=n/2;
			}
			else{
				printf("%lld*3+%d=%lld\n",n,1,n*3+1);
				n=n*3+1;
			}			
		}while(n!=1);
		printf("End");	
	}
	return 0;
}

023:正常血压

总时间限制: 1000ms 内存限制: 65536kB

描述
监护室每小时测量一次病人的血压,若收缩压在90 - 140之间并且舒张压在60 - 90之间(包含端点值)则称之为正常,现给出某病人若干次测量的血压值,计算病人保持正常血压的最长小时数。

输入
第一行为一个正整数n,n < 100
其后有n行,每行2个正整数,分别为一次测量的收缩压和舒张压,中间以一个空格分隔。

输出
输出仅一行,血压连续正常的最长小时数。

样例输入

4
100 80
90 50
120 60
140 90

样例输出

2

代码

#include<stdio.h>
int main()
{
	int n,i;
	int a,b,max=0,sum=0;
	scanf("%d",&n);
	if(n>0&&n<100){
		for(i=1;i<=n;i++){
			scanf("%d%d",&a,&b);
			if((a>=90&&a<=140)&&(b>=60&&b<=90)){
				sum++;
				if(sum>max)
					max=sum;
			}
			else
				sum=0;
		}
			printf("%d",max);
	}
	return 0;
}

024:数字反转

总时间限制: 1000ms 内存限制: 65536kB

描述
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。

输入
输入共 1 行,一个整数N。
-1,000,000,000 ≤ N≤ 1,000,000,000。

输出
输出共 1 行,一个整数,表示反转后的新数。

样例输入

样例 #1:
123

样例 #2:
-380

样例输出

样例 #1:
321

样例 #2:
-83

代码

#include<stdio.h>
#include<math.h>
int main()
{
	long long int n,newnum=0;
	scanf("%lld",&n);
	if(abs(n)<=1000000000){
		while(n){
			newnum=newnum*10+n%10;
			n=n/10;	
		}
		printf("%lld",newnum);
	}
	return 0;
}

025:求特殊自然数

总时间限制: 1000ms 内存限制: 65536kB

描述
一个十进制自然数,它的七进制与九进制表示都是三位数,且七进制与九进制的三位数码表示顺序正好相反。编程求此自然数,并输出显示。

输入
无。

输出
三行:
第一行是此自然数的十进制表示;
第二行是此自然数的七进制表示;
第三行是此自然数的九进制表示。

样例输入

(无)

样例输出

(不提供)

代码

#include <stdio.h>
int main()
{
	int a,b,c;
    // 用三重循环穷举3位7进制数
    for (a=1;a<7;a++)
        for (b=0; b<7; b++)
            for (c=1; c<7; c++)
            {
                // 判断7进制数与倒过来的9进制数是否相同
                if (a*7*7+b*7+c == c*9*9 + b*9 + a)
                {
                    printf("%d\n", a*7*7+b*7+c);
                    printf("%d%d%d\n",a,b,c);
                    printf("%d%d%d\n",c,b,a);
                    return 0;
                }

            }
    return 0;
}

026:雇佣兵

总时间限制: 1000ms 内存限制: 65536kB

描述
雇佣兵的体力最大值为M,初始体力值为0、战斗力为N、拥有X个能量元素。
当雇佣兵的体力值恰好为M时,才可以参加一个为期M天的战斗期,战斗期结束体力值将为0。在同一个战斗期内,雇佣兵每连续战斗n天,战斗力就会上升1点,n为当前战斗期开始时的战斗力。
一个战斗期结束后,雇佣兵需要用若干个能量元素使其体力恢复到最大值M,从而参加下一个战斗期。每个能量元素恢复的体力值不超过当前的战斗力。每个能量元素只能使用一次。
请问:雇佣兵的战斗力最大可以到达多少。

输入
一行包括三个整数M、N、X,相邻两个整数之间用单个空格隔开。M、N、X均为不超过10000的正整数。

输出
输出一个整数,为雇佣兵的最大战斗力。

样例输入

5 2 10

样例输出

6

代码

#include<stdio.h>
int main()
{
	int m,M,N,X;
	m=0;
	scanf("%d%d%d",&M,&N,&X);
	while(X>0){
		X--;
		m=m+N;
		if(m>=M)
		{
			N=N+M/N;
			m=0;//体力值清零 
		}	
	}
	printf("%d",N);
	return 0;
}

027:数字统计

总时间限制: 1000ms 内存限制: 65536kB

描述
请统计某个给定范围[L, R]的所有整数中,数字2出现的次数。

比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21中出现1次,在数22中出现2次,所以数字2在该范围内一共出现了6次。

输入
输入共 1 行,为两个正整数 L 和 R,之间用一个空格隔开。

输出
输出共 1 行,表示数字 2 出现的次数。

样例输入

样例 #1:
2 22

样例 #2:
2 100

样例输出

样例 #1:
6

样例 #2:
20

代码

#include<stdio.h> 
int main()
{
	int i,n,L,R,num=0;
	scanf("%d%d",&L,&R);
	for(i=L;i<=R;i++){
		n=i;
		while(n){
			if(n%10==2)
				num++;
			n=n/10;		
		}
	}
	printf("%d",num);
	return 0;
}

样例输出

样例 #1:
6

样例 #2:
20

代码

#include<stdio.h> 
int main()
{
	int i,n,L,R,num=0;
	scanf("%d%d",&L,&R);
	for(i=L;i<=R;i++){
		n=i;
		while(n){
			if(n%10==2)
				num++;
			n=n/10;		
		}
	}
	printf("%d",num);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小曾爱吃榴莲

非常感谢你的认可!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值