C习题集95-105

目录

95.小乐乐与进制转换

95.小乐乐求和

96.小乐乐定闹钟

97.小乐乐排电梯

98.小乐乐与欧几里得

99.小乐乐改数字

100.小乐乐走台阶

101.小乐乐与序列

102.小乐乐与字符串

103.小乐乐找最大数

104.小乐乐转换成绩

105.小乐乐计算函数


95.小乐乐与进制转换

题目描述:

        小乐乐在课上学习了二进制八进制与十六进制后,对进制转换产生了浓厚的兴趣。因为他的幸运数字是6,所以他想知道一个数表示为六进制后的结果。请你帮助他解决这个问题。

输入描述:

输入一个正整数n  (1 ≤ n ≤ 109)

示例输入:6

输出描述:

输出一行,为正整数n表示为六进制的结果

示例输出:10

代码:

方法一:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	long n = 0;
	scanf("%ld", &n);
	long i = 1;
	long num = 0;
	while (n)
	{
		num += (n % 6) * i;
		i = i * 10;
		n = n / 6;
	}
	printf("%ld", num);
	return 0;
}

方法二:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int i = 0;
	int arr[40] = { 0 };
	while (n)
	{
		arr[i] = n % 6;
		i++;
		n = n / 6;
	}
	for (i--; i >= 0; i--)
	{
		printf("%d", arr[i]);
	}
	return 0;
}

95.小乐乐求和

题目描述:

        小乐乐最近接触了求和符号Σ,他想计算

的结果。但是小乐乐很笨,请你帮助他解答。

输入描述:

输入一个正整数n  (1 ≤ n ≤ 109)

示例输入:10

输出描述:

输出一个值,为求和结果。

示例输出:50

代码:

方法一:遍历求和
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	long n = 0;
	scanf("%ld", &n);
	long sum = 0;
	long i = 0;
	for (i = 1; i <= n; i++)
	{
		sum += i;
	}
	printf("%ld", sum);
	return 0;
}

方法二:等差数列求和
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	long n = 0;
	scanf("%ld", &n);
	long sum = 0;
	sum = (1 + n) * n / 2;
	printf("%ld", sum);
	return 0;
}

96.小乐乐定闹钟

题目描述:

        小乐乐比较懒惰,他现在想睡觉,然后再去学习。他知道现在的时刻,以及自己要睡的时长,想设定一个闹钟叫他起床学习,但是他太笨了,不知道应该把闹钟设定在哪个时刻,请你帮助他。(只考虑时和分,不考虑日期)

输入描述:

输入现在的时刻以及要睡的时长k(单位:minute),中间用空格分开。
输入格式:hour:minute k(如hour或minute的值为1,输入为1,而不是01)
(0 ≤ hour ≤ 23,0 ≤ minute ≤ 59,1 ≤ k ≤ 109)

示例输入:1:0 200

输出描述:

对于每组输入,输出闹钟应该设定的时刻,
输出格式为标准时刻表示法(即时和分都是由两位表示,位数不够用前导0补齐)。

示例输出:04:20

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int hour = 0;
	int minute = 0;
	long k = 0;
	scanf("%d:%d %ld", &hour, &minute, &k);
	hour = (hour + (minute + k) / 60) % 24;
	minute = (k + minute) % 60;
	printf("%02d:%02d", hour, minute);
	return 0;
}

97.小乐乐排电梯

题目描述:

        小乐乐学校教学楼的电梯前排了很多人,他的前面有n个人在等电梯。电梯每次可以乘坐12人,每次上下需要的时间为4分钟(上需要2分钟,下需要2分钟)。请帮助小乐乐计算还需要多少分钟才能乘电梯到达楼上。(假设最初电梯在1层)

输入描述:

输入包含一个整数n (0 ≤ n ≤ 109)

示例输入:12

输出描述:

输出一个整数,即小乐乐到达楼上需要的时间。

示例输出:6

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
    int n = 0;
    int minute = 0;
    scanf("%d", &n);
    minute = n / 12 * 4 + 2;
    printf("%d", minute);
    return 0;
}

98.小乐乐与欧几里得

题目描述:

        小乐乐最近在课上学习了如何求两个正整数的最大公约数与最小公倍数,但是他竟然不会求两个正整数的最大公约数与最小公倍数之和,请你帮助他解决这个问题。

输入描述:

每组输入包含两个正整数n和m。(1 ≤ n ≤ 109,1 ≤ m ≤ 109)

示例输入:10 20

输出描述:

对于每组输入,输出一个正整数,为n和m的最大公约数与最小公倍数之和。

示例输出:30

代码:

//法一:无法通过,会出现溢出问题 - 从而出现截断
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	long long n = 0;
	long long m = 0;
	scanf("%lld %lld", &n, &m);
	long long min = n > m ? m : n;//n和m的最小值
	long long max = n > m ? n : m;//n和m的最大值
	long long i = 0;
	for (i = min; i > 0; i--)
	{
		if ((m % i == 0) && (n % i == 0))
		{
			break;
		}
	}
	printf("%lld\n", i);
	//此时获取的i为最大公约数
	long long j = 0;
	for (j = max; j < m * n; j++)
	{
		if ((j % m == 0) && (j % n == 0))
		{
			break;
		}
	}
	printf("%lld\n", j);
	//此时获取的j为最小公倍数
	printf("%lld\n", i + j);
	return 0;
}

//法二:无法通过,会出现算法复杂度过大的情况!--暴力求解不太行
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    long long n,m;
    scanf("%lld %lld",&n,&m);
    //求最大公约数
    long long max = n>m?m:n;//假设n和m的较小值为最大公约数
    while( 1 )
    {
        if( n%max==0 && m%max==0)
        {
            break;
        }
        max--;
    }
    //此时max里面记录的就是最大公约数
    
    //最小公倍数
    long long min = n > m ? n : m; //假设n和m的较大值为最小公倍数
    while(1)
    {
        if( min%n==0 && min%m==0 )
        {
            break;
        }
        min++;
    }
    //此时min里面记录的就是最小公倍数
    printf("%lld",min+max);
    return 0;
}

//方法三:最优算法
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	//辗转相除法
	long long n = 0;
	long long m = 0;
	scanf("%lld %lld", &n, &m);
	long long max = 0;//最大公约数
	long long min = 0;//最小公倍数

	//保存变量
	long long t1 = n;
	long long t2 = m;

	while (max = n % m)
	{
		n = m;
		m = max;
	}
	max = m;
	//m为最大公约数
	//此时m和n已经改变
	//min = m * n / max; - error
	min = t1 * t2 / max;
	printf("%lld", max + min);
	return 0;
}

99.小乐乐改数字

题目描述:

        小乐乐喜欢数字,尤其喜欢0和1。他现在得到了一个数,想把每位的数变成0或1。如果某一位是奇数,就把它变成1,如果是偶数,那么就把它变成0。请你回答他最后得到的数是多少。

输入描述:

输入包含一个整数n (0 ≤ n ≤ 109)

示例输入:123

输出描述:

输出一个整数,即小乐乐修改后得到的数字。

示例输出:101

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int i = 0;
	int sum = 0;
	while (n)
	{
		int m = n % 10;
		if (m % 2 == 0)
			m = 0;
		if (m % 2 == 1)
			m = 1;
		sum += m * pow(10, i);
		i++;
		n /= 10;
	}
	printf("%d", sum);
	return 0;
}

100.小乐乐走台阶

题目描述:

        小乐乐上课需要走n阶台阶,因为他腿比较长,所以每次可以选择走一阶或者走两阶,那么他一共有多少种走法?

输入描述:

输入包含一个整数n (1 ≤ n ≤ 30)

示例输入:10

输出描述:

输出一个整数,即小乐乐可以走的方法数。

示例输出:89

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int fib(int n)
{
	if (n < 2)
		return n;
	else
		return fib(n - 1) + fib(n - 2);
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = fib(n);
	return 0;
}

101.小乐乐与序列

题目描述:

        老师给了小乐乐一个正整数序列,要求小乐乐把这个序列去重后按从小到大排序。但是老师给出的序列太长了,小乐乐没办法耐心的去重并排序,请你帮助他。

输入描述:

第一行包含一个正整数n,表示老师给出的序列有n个数。
接下来有n行,每行一个正整数k,为序列中每一个元素的值。
(1 ≤ n ≤ 105,1 ≤ k ≤ n)

示例输入:
        4
        2
        2
        1
        1

输出描述:

输出一行,为去重排序后的序列,每个数后面有一个空格。

示例输出:1 2 

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[100001] = { 0 };
	int i = 0;
	int temp;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &temp);
		arr[temp] = temp;
	}
	for (i = 0; i < n; i++)
	{
		if(arr[i])
			printf("%d", arr[i]);
	}
	return 0;
}

102.小乐乐与字符串

题目描述:

        在庆祝祖国母亲70华诞之际,老师给小乐乐出了一个问题。大家都知道China的英文缩写是CHN,那么给你一个字符串s,你需要做的是统计s中子序列“CHN”的个数。子序列的定义:存在任意下标a < b < c,那么“s[a]s[b]s[c]”就构成s的一个子序列。如“ABC”的子序列有“A”、“B”、“C”、“AB”、“AC”、“BC”、“ABC”。

输入描述:

输入只包含大写字母的字符串s。(1 ≤ length ≤ 8000)

示例输入:CCHNCHN

输出描述:

输出一个整数,为字符串s中子序列“CHN”的数量。

示例输出:7

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	char arr[8000] = { 0 };
	scanf("%s", arr);
	//统计字串CHN的个数
	long long c = 0;
	long long ch = 0;
	long long chn = 0;
	char* p = arr;
	while (*p)
	{
		if (*p == 'C')
			c++;
		else if (*p == 'H')
			ch += c;
		else if (*p == 'N')
			chn += ch;
		p++;
	}
	printf("%lld", chn);
	return 0;
}

103.小乐乐找最大数

题目描述:

        小乐乐获得4个最大数,请帮他编程找到最大的数。

一行,4个整数,用空格分开。

示例输入:5 8 2 5

输出描述:

一行,一个整数,为输入的4个整数中最大的整数。

示例输出:8

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int arr[4] = { 0 };
	int i = 0;
	for (i = 0; i < 4; i++)
	{
		scanf("%d", arr[i]);
	}
	//假设arr[0]就是我们的最大值
	int max = arr[0];
	for (i = 1; i < 4; i++)
	{
		if (arr[i] > max)
			max = arr[i];
	}
	printf("%d", max);
	return 0;
}

104.小乐乐转换成绩

题目描述:

        小乐乐输入百分制成绩,他想将成绩转换成等级制。转换规则为:90-100为’A’,80-89为’B’,70-79为’C’,60-69为’D’,59以下为’E’。如果输入的成绩不在0-100之间,输出’F’。

一行,一个整数表示的成绩。

示例输入:78

输出描述:

一行,转换后的等级。

示例输出:C

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	if (n >= 90 && n <= 100)
		printf("A\n");
	else if (n >= 80 && n <= 89)
		printf("B\n");
	else if (n >= 70 && n <= 79)
		printf("C\n");
	else if (n >= 60 && n <= 69)
		printf("D\n");
	else if (n >= 0 && n <= 59)
		printf("E\n");
	else
		printf("F\n");
	return 0;
}

105.小乐乐计算函数

题目描述:

       小乐乐学会了自定义函数,BoBo老师给他出了个问题,根据以下公式计算m的值。

其中 max3函数为计算三个数的最大值,如: max3(1, 2, 3) 返回结果为3。

一行,输入三个整数,用空格隔开,分别表示a, b, c。

示例输入:1 2 3

输出描述:

一行,一个浮点数,小数点保留2位,为计算后m的值。

示例输出:0.30

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int max3(int a, int b, int c)
{
    int max = a > b ? a : b;
    return max > c ? max : c;
}
int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    double m = 0;
    scanf("%d %d %d", &a, &b, &c);
    m = 1.0 * max3(a + b, b, c) / ((max3(a, b + c, c) + max3(a, b, b + c)));
    printf("%.2lf", m);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_64446981/article/details/130087786