判断大月还是小月

文章讲述了作者如何在C语言中使用一个标记位优化判断月份为大月还是小月的程序,原代码存在冗余打印,通过设置标记位避免了重复输出,寻求更高效的解决方案和交流建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题型:判断大月还是小月

难点:怎么一次性输出,保证时间复杂度为O(n)的情况;

本来想着在一个数组里面,用一层for循环加个if-else判断就能输出来,但因为if在for循环嵌套里面,导致每一次遍历都会打印出月份信息,一直也想不到怎么让他检测一次就直接打印出来,而不是重复打印。

原先代码如下:
int big[7] ={1,3,5,7,8,10,12};
for(int i =0;i<7;i++){
if(){
printf("-------")
	}
}else{
    printf("---------------")
}
这样做导致每一次都会打印一遍,后来才想到设置一个标记位,通过真假判断能在循环体外面打印出来:
#include <stdio.h>
int main(){
	int month;
	int found =0;//设置标记位
	printf("请输入月份:");
	scanf("%d",&month);
	//判断
	if (month !=2){
		int big[7] ={1,3,5,7,8,10,12};
		//在数组中遍历
		for(int i =0;i<7;i++){
			if(month == big[i]){
				found =1;	//数组中遍历到元素时,标记位为1
				break;		//否则跳出循环
			}
		}
		if (found){
			printf("%d月是大月",month);	//found为1则会执行真语句
		}else{
			printf("%d月是小月",month);
		}
	}else{
	printf("既不是大月也不是小月");
	}
	return 0;
}

本着学习的态度和大家讨论和交流,希望大家看完能给出自己的建议,我也会认真看的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值