幸运的数字

每日一道算法题之幸运数字

一、题目描述

题目来源:洛谷

如果把一个数字十进制表示的奇数位和偶数位分别相加得到的和相同,小小就认为它是一个幸运的数字。对于给定的 a 和 b,小小希望你求出 a,a+1,a+2,…,b 中幸运数字的数量。

C++程序要求输入输出示例如下:

输入: 1   100            输出:9

二、思路

  用for循环去枚举每一个数,然后通过取余和除法操作得到每一位上的数,奇数位相加,偶数位相加,最后进行比较。

三、C++代码

#include<bits/stdc++.h>
using namespace std;

//幸运数字


int main(){
	
	
	int a,b;
	cin>>a>>b;
	int temp;
	int flag;
	int number=0;
	int odd,even;
	for(int i=a;i<=b;i++){  //从a到b枚举每一个数
		
		temp=i,odd=0,even=0,flag=0;
		while(temp>0){
			
			if(flag==0){  //取出这个数的奇数位 ,用flag实现奇偶位的交替  
				odd+=temp%10;
				flag=1;
			}else{           //取出这个数的偶数位
				even+=temp%10;
				flag=0;
			}
			temp/=10;
		}
		
		if(odd==even){
			number++;
		}
		
	} 
	cout<<number;
	 
}
### C语言实现幸运数字判断方法 在C语言中,可以通过逻辑运算符条件语句来实现对幸运数字的判断。以下是基于提供的引用内容以及标准编程实践的具体说明。 #### 输入验证 为了确保程序运行的安全性准确性,在执行任何计算之前需先验证输入数据的有效性。具体来说: - **价格 `k` 幸运数字 `n` 应当是非负整数**[^1]。 - **进制数 `m` 必须大于 1**。 - **幸运数字 `n` 必须小于进制数 `m`**。 如果上述任一条件不成立,则应立即终止程序并返回错误提示(如输出 `0` 或其他指定消息)。 #### 幸运数字定义与判定逻辑 根据已有资料中的描述,“幸运数字”的基本特性通常涉及某些特定模除关系或其他数学属性。例如,在给定例子中有提到满足以下两个条件之一即可视为“幸运”: - 数字能被7整除但不能被4整除; - 或者符合更复杂的模式比如仅由‘4’‘7’组成等不同版本的要求[^2][^3]。 因此编写实际应用时可以根据需求灵活调整检测规则。下面展示了一种通用形式下的解决方案框架: ```c #include <stdio.h> int isLuckyNumber(int num){ while(num > 0){ int digit = num % 10; if(digit != 4 && digit != 7) return 0; // 不全是4或7则不是幸运数 num /= 10; } return 1; // 所有都是4或者7才返回true(1) } int main(){ int m,n,k,flag=0; scanf("%d%d",&m,&n); /* 验证输入合法性 */ if(m<=1 || n<0 || k<0 || n>=m){ printf("0"); return 0; } for(int i=m;i<=n;i++){ if(isLuckyNumber(i)){ printf("%d ",i); flag++; } } if(!flag)printf("No lucky numbers found."); return 0; } ``` 此段代码首先定义了一个辅助函数用于单独测试某个数值是否属于所期望类型的“幸运数字”。接着通过循环遍历范围[m..n]内的每一个可能候选对象,并调用前述工具完成最终筛选工作。最后依据是否存在符合条件的结果决定显示相应信息。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值