蓝桥杯c语言试(2)

1、

/* Excel表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式。小明设计的样式为:第1行蓝色,第2行白色,第3行蓝色,第4行白色,…
现在小明想知道,从第21行到第50行一共包含了多少个蓝色的行。
请你直接提交这个整数,千万不要填写任何多余的内容。
思路:问的是包含多少个蓝色,而题目中除了蓝色就是白色,正好蓝色所在行数是奇数,白色所在行是偶数。题目实质是想让我们求从21行到50行有多少个奇数。
实现方法:从21遍历到50,在这个循环中如果该数是奇数,则次数进行加1,最后打印出次数即可
*/

#include<stdio.h>
int main() {

	int n=0, i;
    for (i = 21; i < 51; i++) {
        if (i % 2 != 0) {
            n++;
        }
    }
    printf("%d", n);
    return 0;
}
//答案:15
//
//小技巧:利用数学求解,直接看我们可能不确定21到50有多少个奇数,但是从1到10,我们知道有5个奇数,对比就可以发现21到50有15个奇数

2、

//回文数
//
//问题描述
//1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
//输出格式
//按从小到大的顺序输出满足条件的四位十进制数。

#include<stdio.h>
int main() {
	for (int i = 1000; i < 10000; i++) {
		int a = i % 10000 / 1000;
		int b = i % 1000 / 100;
		int c = i % 100 / 10;
		int d = i % 10;
		if (a == b & c == d)
			printf("%d\n", i);
	}
}

3、

//加法变乘法
//
//我们都知道:1 + 2 + 3 + … + 49 = 1225
//现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
//
//比如:
//1 + 2 + 3 + … + 10 * 11 + 12 + … + 27 * 28 + 29 + … + 49 = 2015
//就是符合要求的答案。
//
//请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。
//
//注意:需要你提交的是一个整数,不要填写任何多余的内容。
//
//
//
//此题思路很简单,有48个‘ + ’号,题目要求将其中两个不相邻的 ‘ + ’ 号变成 ‘ * ’ 号后式子得出的结果是2015.
//
//从第1个 ‘ + ’ 号开始遍历,依次将第1~46个 ‘ + ’ 号变成 ‘ * ’ 号,定位好第一个 ‘ + ’ 号后,定位第二个 ‘ + ’ 号,
//
//即从第一个 ‘ + ’ 号后定位第二个 ‘ + ’ 号(注意第一个 ‘ + ’ 号前面不能是 10 )。定位好两个 ‘ + ’ 号后判断式
//
//子值是否等于2015,等于跳出循环,否则继续循环。

#include<stdio.h>
int main() {
	for (int i = 1; i < 30; i++)
	{
		for (int j = i + 2; j < 30; j++) {
			if (1225-2*i-1-2*j-1+j*(j+1)+i*(i+1)==2015)printf("%d\n",i);
		}

	}
	return 0;
}

4、

//立方尾不变
//
//有些数字的立方的末尾正好是该数字本身。
//比如:1, 4, 5, 6, 9, 24, 25, ….
//
//请你计算一下,在10000以内的数字中(指该数字,并非它立方后的数值),符合这个特征的正整数一共有多少个。
//
//请提交该整数,不要填写任何多余的内容。
//
//思路分析:
//这道题还是很简单的。
//只要通过枚举1 - 10000然后计算出该数的立方。在对该数立方取该数的位数
//if(该数立方 % 该数位数 == 该数)
//{
// 则算符合特征的数
//}
//
//1
//2
//3
//4
//5
//6
//7

#include <stdio.h>

#define SIZE 10000

int f(int n)
{
    if (n >= 1 && n < 10) return 10;
    if (n >= 10 && n <= 99) return 100;
    if (n >= 100 && n <= 999) return 1000;
    if (n >= 1000 && n <= 9999) return 10000;
}

int main()
{
    long long sum;
    long long i;
    int wei = 0;
    int count = 0;

    for (i = 1; i < SIZE; i++)
    {
        wei = f(i);    //返回该基数的位数 
        sum = (long long)(i * i * i) % wei;

        if (sum == i)
        {
            //打印出各个符合条件的数
            printf("%lld\n", sum);
            count++;
        }
    }
    printf("%d\n", count);
    return 0;
}

5、

//有一堆煤球,堆成三角棱锥形。具体:
//第一层放1个,
//第二层3个(排列成三角形),
//第三层6个(排列成三角形),
//第四层10个(排列成三角形),
//…
//如果一共有100层,共有多少个煤球?
//
//输出第一百层的煤球数量。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i;
    int s = 0;
    for (i = 1; i <= 100; i++)
    {
        s += i * (i + 1) / 2;
    }
    printf("%d\n", s);
    return 0;
}

6、

//如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
//对新产生的正整数再做同样的处理。
//
//如此一来,你会发现,不管开始取的是什么数字,
//最终如果不是落入1,就是落入同一个循环圈。
//
//请写出这个循环圈中最大的那个数字。
//
//请填写该最大数字。
//注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
//
//输入
//没有输入。
//
//输出
//1个整数

#include <stdio.h>
int main() {
    int a = 2;
    int max = 0;
    while (1) {
        int i = 0;
        while (a > 0) {
            i += (a % 10) * (a % 10);
            a /= 10;
        }
        a = i;
        if (max == a)
            break;
        else
            max = max > a ? max : a;

    }
    printf("%d", max);
    return 0;
}

//1
//2
//3
//4
//5
//6
//7
//8
//9
//10
//11
//12
//13
//14
//15
//16
//17
//18
//19
//20
//
//答案:145

7、

//闰年判断
//
//问题描述
//
//给定一个年份,判断这一年是不是闰年。
//
//当以下情况之一满足时,这一年是闰年:
//
//年份是4的倍数而不是100的倍数;
//
//年份是400的倍数。
//
//其他的年份都不是闰年。
//输入格式
//输入包含一个整数y,表示当前的年份。
//输出格式
//输出一行,如果给定的年份是闰年,则输出yes,否则输出no。
//
//说明:当试题指定你输出一个字符串作为结果(比如本题的yes或者no,你需要严格按照试题中给定的大小写,写错大小写将不得分。
//样例输入
//2013
//样例输出
//no
//样例输入
//2016
//样例输出
//yes
//数据规模与约定
//1990 <= y <= 2050。

#include<stdio.h>

int main()
{
	int year = 2016;
	/*	int flag=1;
		while(flag)
		{
			scanf("%d",&year);
			if(year>1990 && year<2050)
				flag=0;
		}*/
	scanf("%d", &year);
	if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
	{
		printf("yes");
	}
	else {
		printf("no");
	}
	printf("\n");
	return 0;
}

8、

//数列特征
//
//问题描述
//
//给出n个数,找出这n个数的最大值,最小值,和。
//输入格式
//
//第一行为整数n,表示数的个数。
//
//第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。
//输出格式
//输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。
//样例输入
//5
//1 3 - 2 4 5
//样例输出
//5
//- 2
//11
//数据规模与约定
//1 <= n <= 10000。

int main()
{
	int n, i;
	int a[N];
	int max, min, sum = 0; //
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
		scanf("%d", &a[i]);
	}
	max = a[0];
	min = a[0];
	for (i = 0; i < n; i++)
	{
		if (a[i] > max)
			max = a[i];
		if (a[i] < min)
			min = a[i];
		sum += a[i];
	}
	printf("%d\n%d\n%d\n", max, min, sum);
	return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值