魔数湖南大学程序设计作业

【问题描述】

    魔数是由数字1、14和144连接而成的数,可以使用这些数任意多次,因此14144、141414和1411是魔数,而514和414不是。

【输入形式】

    输入一个整数n(1≤n≤109)。

【输出形式】

    如果n是魔数,则输出"YES",否则输出"NO"

【样例输入1】

114114
【样例输出1】

YES
【样例输入2】

441231
【样例输出2】

NO

实现思路:找出1,14,144各有几个,再将每个数个数与相应的个数相乘得到一个数字位数,再将这个数字位数与输入的数字位数比较,若相等(即数字中没有掺杂其他的数),则这个数为魔数。
注意:144中含有1和14;14中含有1,全位数的的时候要相应变化!
代码展示:

#include
using namespace std;
int z1(int w);//定义找1,14,144,的函数和确定输入数字位数的函数 
int z14(int x);
int z144(int y);
int zws(int z);
int main() {int n,a,b,c,d;
cin>>n;
a=z1(n),b=z14(n),c=z144(n),d=zws(n);
if((a+b+c)==d)cout<<"YES";
else cout<<"NO";
}
int z14(int x){		
int k=0;  
  while(x!=0){	
  if(x%100==14)k++;
  	x/=10;}
  	return k;}
  	int z144(int y){		
  	int j=0;  
  	while(y!=0){	
  	if(y%1000==144)j++;
  		y/=10;}
  		return j;}
  		int zws(int z){	
  		int i=0;	
  		while(z!=0){	
  		z/=10;	
  		i++;	}	
  		return i;}
  		int z1(int w){	
  		int m=0;   
  		while(w!=0){
  		if(w%10==1)m++;
  		w/=10;}
  		return m;}

你可能感兴趣的:(笔记)