百日大刷题No.6

⭐博客主页:️CS semi主页
⭐欢迎关注:点赞收藏+留言
⭐系列专栏:百日大刷题
⭐代码仓库:C Advanced
家人们更新不易,你们的点赞和关注对我而言十分重要,友友们麻烦多多点赞+关注,你们的支持是我创作最大的动力,欢迎友友们私信提问,家人们不要忘记点赞收藏+关注哦!!!


一、找完数

1.题目描述和思路

在这里插入图片描述

思路:遍历一个输入从n到m的数,除出来每一个因数,再加起来,与原本的数相比较,如果相等则开始进行相加的操作,先把1拿出来。在从2开始到这个数依次拿出来相加,再加一个标志,如果在这个范围内没有完数,则输出为flag=1。
注意地方:定义sum要在局部中定义局部变量,因为每做完一次遍历后,sum的值会进行改变,需要在for循环语句中进行重新赋值,重新赋值为1。

2.代码实现

#include<stdio.h>


int main(){
	int num1 = 0;
	int num2 = 0;
	scanf("%d %d", &num1, &num2);

	int i = 0;
	int flag = 1;
	int j = 0;
	int sum = 0;
	
	for (i = num1; i <= num2; i++) {
		int sum = 1;                  //定义局部变量重新赋值sum=1(每做完一次计算sum的值会改变)
		//找因子并相加
		for (j = 2; j < i; j++) {
			if (i % j == 0) {
				sum += j;
			}
		}
		//判断是否相等
		if (sum == i) {
			flag = 0;
			//先输出1
			printf("%d = 1", i);
			//输出每一个因子
			for (int k = 2; k < i; k++) {
				if (i % k == 0) {
					printf(" + %d", k);
				}
			}
			printf("\n");
		}
	}

	//如果这段区间都没有,则输出为NONE
	if (flag == 1) {
		printf("NONE\n");
	}

	return 0;
}

二、求符合给定条件的整数集

1.题目描述和思路

在这里插入图片描述

思路:三次循环,判断第一个数与后面两个数是否相等。

2.代码实现

#include<stdio.h>
int main()
{
    int A, i, j, k, c = 0;

    scanf("%d", &A);

    for (i = A; i <= A + 3; i++)
    {
        for (j = A; j <= A + 3; j++)
        {
            for (k = A; k <= A + 3; k++)
            {
                if ((i != j) && (j != k) && (i != k)) {
                    c++;
                    printf("%d%d%d", i, j, k);
                    //每行满六个则换行
                    if (c == 6)
                    {
                        printf("\n");
                        c = 0;    //换完行重新赋值重新排
                    }
                    else
                        printf(" ");
                }
            }
        }
    }
    return 0;
}

三、打印九九口诀表

1.题目描述和思路

在这里插入图片描述

思路:注意printf中先从j开始,往后计算。

2.代码实现

#include<stdio.h>
#include<math.h>
int main()
{
    int N, i, j;
    scanf("%d", &N);
    for (i = 1; i < N + 1; i++)
    {
        for (j = 1; j <= i; j++)
        {
            printf("%d*%d=%-2d  ", j, i, i * j);
        }
        printf("\n");
    }
    return 0;
}

四、人民币兑换

1.题目描述和思路

在这里插入图片描述
在这里插入图片描述

思路:用一张图片来演示一下计算过程。

在这里插入图片描述

2.代码实现

#include<stdio.h>
int main()
{
    int n, five = 1, two, one;  //个数
    scanf("%d", &n);
    for (; five <= n; five++) {
        two = 50 - 4 * five;
        one = 3 * five + 50;
        if (50 - 4 * five > 0)
        {
            printf("%d %d %d\n", five, two, one);
        }
    }
    return 0;
}

五、编程打印空心字符菱形

1.题目描述和思路

在这里插入图片描述
在这里插入图片描述

思路:如下三图。先将这个空心字符菱形分为四个区,分别是左上角RT三角形区。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.代码实现

#include<stdio.h>
int main() {
	int n = 0;
	char c;
	scanf("%c %d", &c ,&n);
	int i = 0;
	int j = 0;
	//上半部分
	for (i = 1; i <= n / 2 + 1; i++) {
		//上半部分倒三角形
		for (j = 1; j <= n / 2 + 1 - i; j++) {
			printf(" ");
		}
		//上半部分正三角形
		for (j = 0; j < 2 * i - 1; j++) {  //总共几个位置
			//判断语句打印空格
			if (j == 0 || j == 2 * i - 2) {
				printf("%c",c);
			}
			else {
				printf(" ");
			}

		}
		//打印完一行往后递增一位字母
		c += 1;
		printf("\n");
	}
	//多往后递增了两位,这里先让它回到原本最大的那个字母
	c -= 1;
	//下半部分
	for (i = 1; i <= n / 2; i++) {
		c -= 1;
		//打印左下角空格区域三角形
		for (j = 1; j <= i; j++) {
			printf(" ");
		}
		//打印中间倒三角形
		for (j = n - 2; j >= 2 * i - 1; j--) { //j>=到j=这段的长度就是这行的长度
			//判断语句打印空格和字母
			if (j == n - 2 || j == 2 * i - 1) {
				printf("%c", c);
			}
			else {
				printf(" ");
			}
		}
		/*c -= 1;*/
		printf("\n");
	}

	return 0;
}

六、幸运彩票

1.题目描述和思路

在这里插入图片描述

思路:把输入的一个数里面的每一位拿出来进行操作。

2.代码实现

#include<stdio.h>
int main()
{
    int N, i=1;
    scanf("%d", &N);
    for (; i <= N; i++) {
        int shu, one, two, three, four, five, six, k, j;
        scanf("%d", &shu);
        one = shu / 100000;
        two = shu / 10000 % 10;      
        three = shu / 1000 % 10;     
        four = shu / 100 % 10;        
        five = shu / 10 % 10;       
        six = shu % 10;
        j = one + two + three;
        k = four + five + six;
        if (j != k) 
        {
            printf("Wish you good luck.\n");
        }
        else
        {
            printf("You are lucky!\n");
        }
    }
    return 0;
}

七、输出学生成绩(用动态内存做)

1.题目描述和思路

在这里插入图片描述

思路:主要是动态内存的做法可能有点陌生,但是其实很简单,用一个数组的动态内存就类似于用一个数组。

2.代码实现

#include<stdio.h>
#include<malloc.h>
int main() 
{
    int N;
    int* arr;
    double av = 0;
    double sum = 0;
    scanf("%d", &N);
    arr = (int*)malloc(sizeof(int) * N);
    int i = 0;
    for (i = 0; i < N; i++) {
        scanf("%d", &arr[i]);
        sum += arr[i];
    }
    double min = arr[0];
    double max = arr[0];
    for (i = 0; i < N; i++) {
        if (arr[i] > max) {
            max = arr[i];
        }
        else if (arr[i] < min) {
            min = arr[i];
        }
    }
    av = (double)sum / N;
    printf("average = %.2lf\n", av);
    printf("max = %.2lf\n", (double)max);
    printf("min = %.2lf\n", (double)min);
    free(arr);
    return 0;
}


总结

第六天的刷题难度略有上升,但还需要搞清楚原理来解决它们!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

2022horse

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值