zoukankan      html  css  js  c++  java
  • 幸运数字

    幸运数字

    Alice认为4和7是幸运数字,并且如果一个数字是几个幸运数字的和,那么这个数字也是幸运数字,例如

    • 14=7+7
    • 18=7+7+4
    • 11=7+4
    • 7=7
      现在给你Q个数字,请你分别判断每个数字是否为幸运数字

    我的代码

    #include<bits/stdc++.h>
    using namespace std;
    bool xnyp(long long x){
    	if(x<4)
    		return false;
    	if(x==7 || x==4)
    		return true; 
    	else if(xnyp(x-7) || xnyp(x-4))
    		return true;
    	else return false;  
    }
    int main(void){
    	int q;
    	long long x;
    	cin>>q;
    	for(int i=0;i<q;i++){
    		cin>>x;
    		if(xnyp(x))
    			cout<<"Yes"<<endl;
    		else 
    			cout<<"No"<<endl;  
    	}
    	return 0;
    }
    
    

    问题就在于大数怎么办?这种东西竟然是找规律
    这个规律有两层。
    一层是这样
    x是幸运数,有一个数字7加出来的,那么这个数字7可以换成4+4,那么x+1也是幸运数。
    如果有7个4呢,那么就有4个7,可以替换4次,那么x,x+1,x+2,x+3,x+4都是幸运数,那么28是幸运数字,29 30 31 32 也都是,而32里面也有7个4啊,类推,33 34 34 36 都是幸运数。
    那么28以后必然是幸运数字。
    接下来是室友想出来的,继续缩小范围的方法。
    幸运树必然x==3m+4n的样式。
    那么如果m>=n,必然是幸运数字。
    如果m<n呢?(为了寻找不幸运的数字)
    取,n 为1,2,3,然后,1,m取0,1 3,m取0,1,2,那么找到的17是最大的不幸运数字。
    取n等于4,那么m可以0,1,2,3
    16 19 22 25,发现全是幸运数字了。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    int a[]={1,2,3,5,6,9,10,13,17};
    
    int main(void){
    	int q;
    	long long x;
    	bool flag=true;
    	cin>>q;
    	for(int i=0;i<q;i++){
    		cin>>x;
    		flag = true;
    		for(int j=0;j<9;j++){
    			if(x==a[j]){
    				flag = false;
    				break;
    			}
    		}
    		if(flag)
    			cout<<"Yes"<<endl;
    		else 
    			cout<<"No"<<endl;  
    	}
    	return 0;
    }
    
  • 相关阅读:
    使用图形界面调试arm程序: insight + gdb
    skyeye相关命令简介
    /bin/sh: can
    安装skyeye1.3.3 过程中可能遇到的问题
    linux下ARM汇编程序的调试
    ARM标准汇编与GNU汇编
    从ARMASM汇编到GNU ARM ASM汇编
    How much faster is assembly language?
    A number of problems from coded in ARM assembly language Problems
    An exploration of ARM assembly language
  • 原文地址:https://www.cnblogs.com/lingr7/p/10520874.html
Copyright © 2011-2022 走看看