C语言蓝桥杯组题目

发布于:2024-11-27 ⋅ 阅读:(71) ⋅ 点赞:(0)

系列文章目录


前言

蓝桥杯看着很简单实际有点难度,只有自己熟练掌握语法之后再去刷算法题才可以游刃有余.

题目

第一题.1, 2, 3, 4 能组成多少个互不相同且无重复数字的三位数?都是多少?

结果:
  •  可以组成 24 个三位数。
    
  •  三位数分别是: 123, 124, 132, 134, 142, 143, 213, 214, 231, 234, 241, 243, 312, 314, 321, 324, 341, 342, 412, 413, 421, 423, 431, 432.
    
#include <stdio.h>
main() {
  int i, j, k;
  for (i = 1; i <= 4; i++) {
    for (j = 1; j <= 4; j++) {
      for (k = 1; k <= 4; k++) {
        if (i != j && i != k && j != k) {
          printf("i=%d j=%d k=%d ", i, j, k);
        }
      }
    }
  }
}

思路

  • 使用穷举算法

第二题: 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

结果:
  •   该数是 21
    
#include <stdio.h>
#include <math.h>

main() {
    int x;
    // 假设搜索范围为0到10000
    for (x = 0; x <= 10000; x++) {
        // 检查 x + 100 是否为完全平方数
        int a_square = x + 100;
        int b_square = x + 268;

        // 使用 sqrt 函数计算平方根并检查是否为完全平方数
        int a = (int)sqrt(a_square);
        int b = (int)sqrt(b_square);

        if (a * a == a_square && b * b == b_square) {
            printf("找到满足条件的整数: %d\n", x);
            return 0; // 找到解后退出
        }
    }

    printf("没有找到满足条件的整数。\n");
}

思路

  • 完全平方数检测:
  • 使用 sqrt() 函数计算平方根,并将结果转换为整数。
  • 检查 ( a ) 和 ( b ) 的平方是否分别等于 ( x + 100 ) 和 ( x + 268 )。

第三题: 输入某年某月某日,判断这一天是这一年的第几天?

结果:
  •   输入:
    
  •   	year:2000
    
  •   month:12
    
  •   	day:6
    
  •    结果: 341
    
#include <stdio.h>

int main() {
  int year, month, day, sum = 0,i;
  int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  printf("请输入年份:");
  scanf("%d", &year);
  printf("请输入月份:");
  scanf("%d", &month);
  printf("请输入日期:");
  scanf("%d", &day);

  // 判断是否为闰年
  if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
    days[1] = 29;
  }

  // 计算天数
  for ( i = 0; i < month - 1; i++) {
    sum += days[i];
  }
  sum += day;
  
  printf("%d年%d月%d日是这一年的第%d天", year, month, day, sum);

}

思路

  • 1.区分平年和闰年
  • 2.把每一年的天数加起来
  • 3.最后在输出

第四题:输入三个整数X,Y,Z,请把这三个数由小到大输出

结果:
  •   输入:
    
  •   	x: 200
    
  •       y: 12
    
  •   	z: 600
    
  •    结果: 12 200 600
    
#include <stdio.h>

main() {
    int X, Y, Z;
    
    // 输入三个整数
    printf("请输入三个整数(X Y Z):");
    scanf("%d %d %d", &X, &Y, &Z);
 
    // 使用简单的排序算法进行排序
    int temp;
    // 冒泡排序
    if (X > Y) {
        temp = X;
        X = Y;
        Y = temp;
    }
    if (X > Z) {
        temp = X;
        X = Z;
        Z = temp;
    }
    if (Y > Z) {
        temp = Y;
        Y = Z;
        Z = temp;
    }
    // 输出结果
    printf("由小到大的顺序为:%d %d %d\n", X, Y, Z);
}

思路

  •    1.三个数用冒泡排序输出
    

第四题:C语言用*号输出字母C的图案

#include <stdio.h>

main() {
    int height = 7; // 图案高度
    int width = 7;  // 图案宽度
    int i,j;
    for ( i = 0; i < height; i++) {
        for ( j = 0; j < width; j++) {
            // 输出 '*' 的条件
            if ((i == 0 && j > 0 && j < width - 1) ||  // 顶边
                (i == height - 1 && j > 0 && j < width - 1) ||  // 底边
                (j == 0 && (i > 0 && i < height - 1))) { // 左边
                printf("*");
            } else {
                printf(" ");
            }
        }
        printf("\n"); // 换行
    }
}
思路:
	1. 外层循环 for (int i = 0; i < height; i++) 控制行数(高度)。
	    内层循环 for (int j = 0; j < width; j++) 控制列数(宽度)。
	2. 第一行和最后一行打印 * 的条件是:当 i 为 0 或 height - 1,且 j 在 0 和 width - 1 之间。
		左边竖线的条件是:j == 0 且 i 在 0 和 height - 1 之间。
	3. 在符合条件的情况下打印 *,否则打印空格

持续更新中…

经典结尾

烛光照亮了晚餐,照不出个答案;恋爱不是温馨的请客吃饭.


网站公告

今日签到

点亮在社区的每一天
去签到