记录自己为学习算法而入门c++的学习历程,并随时在手机上看自己写的狗屎代码.
想到可以优化的地方修改,有更好的方法另加.
题目,算法均来源于网络查找.本文仅作个人学习使用,不保证严谨度.
运行程序Techie Delight
统计字符1
不等同于字符串,统计的对象是从1到n特定数字出现的次数.当时写的时候一直想着将这n个数存到数组中再操作,但对如何处理毫无办法.
#include <iostream> using namespace std; int main(){ int n,x,num,count=0; cin>>n>>x; for(int i=1;i<=n;i++){ num=i; while(num!=0){ if(num%10==x) count++; num/=10; } } cout<<count; return 0; }
|
求最大公约数
最大公约数 - OI Wiki
欧几里得算法(辗转相除法)
数学原理:两个整数的最大公约数等于其中较小的那个数和两数相除所得余数的最大公约数。
GCD(a,b) = GCD(b,a%b)
int gcd(int a,int b){ return b==0?a:gcd(b,a%b); }
int gcd(int a,int b){ while(b!=0){ int temp=a; a=b; b=temp%b; } return a; }
|
- 试着用以上方法求斐波那契数列相邻两项的最大公因数?效率会大打折扣.
判断:一个数及它的各个位是否都是质数
#include<iostream> #include<cmath> using namespace std;
bool prime(int n){ if(n==1) return false; if(n==2||n==3) return true; for(int i=2;i<sqrt(n)+1;i++){ if (n%i!=0) continue; if(n%i==0) return false; } return true; }
bool every_num(int n){ while(n!=0){ if(!prime(n%10)) return false; n/=10; } return true; }
int main(){ int t; int num[1000]; cin>>t; for(int i=1;i<=t;i++) cin>>num[i]; for(int j=1;j<=t;j++){ if(prime(num[j])&&every_num(num[j])) cout<<"YES"<<"\n"; else cout<<"NO"<<"\n"; } return 0; }
|