计算智能复习

#include <iostream>
#include <algorithm>
#include <limits.h>
#include <map>
#include <set>
#include <stack>
#include <cmath>
#include <cstring>
#include <vector>
#include <queue>

using namespace std;

const int N = 1e5;
typedef long long ll;
#define IOS ios::sync_with_stdio(0),cin.tie(0)

//class group{
//public:
//	int AC;
//	string name;
//	int time;
//	vector<vector<int>> info;
//	group(){
//		this->AC = 0;
//		this->time = 0;
//		this->info = vector<vector<int>> (100,vector<int>(2,-1));
//	}
//};
//
//vector<group> groups;
//
//int Search(string name){
//	for (int i=0;i<groups.size();i++){
//		if(groups[i].name == name){
//			return i;
//		}
//	}
//	return -1;
//}
//
//bool cmp(group a,group b){
//	if(a.AC!=b.AC){
//		return a.AC>b.AC;
//	}else{
//		return a.time<b.time;
//	}
//}
//
//int main(){
//	IOS;
//	int sub_time,judge_result;
//	string sub_name;
//	char problem_num;
//	
//	while(cin>>sub_time>>sub_name>>problem_num>>judge_result){
//		int index = Search(sub_name);
//		if(index==-1){
//			group new_group;
//			new_group.name = sub_name;
//			index = groups.size();//更新index 
//			groups.push_back(new_group);
//		}
//		if(groups[index].info[problem_num-'A'][0] == 0){
//			continue;
//		}
//		if(judge_result != 0){
//			groups[index].info[problem_num-'A'][1]++;
//		}else{
//			groups[index].AC+=1;
//			groups[index].time += sub_time+(groups[index].info[problem_num-'A'][1]+1)*20; //初始化为-1了 
//		}
//	} 
//	sort(groups.begin(),groups.end(),cmp);
//	for(group it:groups){
//		if(it.AC!=0){
//			cout<<it.name<<" "<<it.AC<<" "<<it.time<<endl; 
//		}
//	}
//	
//	return 0;
//}

//int a[N],result;

//int search1(int n,int min_pos,int step){
//	if(n<3){
//		return min_pos;
//	}
//	if(n==3){
//		return INT_MAX;
//	}
//	int deleodd = search1(n/2,min_pos+step,step*2);
//	int deleeven = search1((n+1)/2,min_pos,step*2);
//	return min(deleodd,deleeven);	
//}

//int search2(int n){
//	if( n<N && (a[n]!=0)){
//		return a[n];
//	}
//	if(n==3) {
//		return 1;	
//	}
//	if(n<3){
//		return 0;	
//	} 
//	result = search2(n/2)+search2((n+1)/2);
//	
//	if(n<N){
//		a[n] = result;	
//	} 
//	return result; 
//} 

//vector<int> a;
//set<int> b;
//multiset<int> c;
//
//bool check(int a,int b){
//	c.clear();
//	while(a || b){
//		c.insert(a%10);
//		c.insert(b%10);
//		a /= 10;
//		b /= 10;
//	}
//	for(int i=1;i<=9;i++){
//		if(c.count(i)>1) return false;
//	}
//	return true;
//}
//
//void seek(int n){
//	for(int i=2;i<N;i++){
//		if( i%n==0 && check(i,i/n)){
//			printf("%05d/%05d=%d\n",i,i/n,n);
//		}
//	}
//}


//int main(){
//	IOS;
//	ll a,b;
//	int tmp[11];
//	cin>>a>>b;
//	for(int i=1;i<=a;i++){
//		cin>>tmp[i];
//	}
//	if(a==1){
//		if(tmp[1]%b==0){
//			cout<<tmp[1]<<endl;
//			return 0;
//		}else{
//			cout<<-1<<endl;
//			return 0;
//		}
//	}
//	sort(tmp+1,tmp+a+1,less<int>());
//	do{
//		int flag=0;
//		ll c=0;
//		for(int i=1;i<=a;i++){
//			c = c*10+tmp[i];
//		}
//		if(c%b==0&&c>=pow(10,a-1)){
//			flag=1;
//			cout<<c<<endl;
//			return 0;
//		} 
//	}while(next_permutation(tmp+1,tmp+a+1));
//	cout<<-1<<endl;
//	return 0;
//}

//ll H(int n){
//	if(n<0) return 0;
//	ll ans = 0;
//	int i,j;
//	for(i=1;n/i-n/(i+1)!=0;i++){
//		ans += i*(n/i-n/(i+1));
//	}
//	for(j=1;j<=n/i;j++){
//		ans += n/j; 
//	}
//	return ans;
//}
//
//void seek(int n){
//	stack<pair<int,int>> a;
//	for(int i=1;i<n+sqrt(n*n-i*i);i++){
//		double tmp = sqrt(n*n-i*i);
//		if(tmp == int(tmp)&&i>tmp){//这里i必须要在tmp前面,因为tmp是double具有误差 ,而i比较小时,double误差小 
//			a.push({i,int(tmp)});
//		}
//	}
//	
//	for(int i=n+1;i<n+sqrt(i*i-n*n);i++){
//		double tmp = sqrt(i*i-n*n);
//		if(tmp == int(tmp)){
//			a.push({i,int(tmp)});
//		}
//	}
//	
//	while(!a.empty()){
//		pair<int,int> b = a.top();
//		cout<<b.first<<","<<b.second<<endl; 
//		a.pop();
//	}
//}
//int main(){
//	IOS;
//	int T,n;
//	cin>>T;
//	while(T--){
//		cin>>n;
//		seek(n);
//		cout<<endl;
//	}
//	return 0;
//}

//bool udg[N],dg[N],col[N];
//int n,ans;
//
//void queen_seek(int cur){
//	if(cur>n){
//		ans++;
//		return;
//	}
//	for(int i=1;i<=n;i++){
//		if((!dg[i-cur+n])&&!(udg[i+cur])&&(!col[i])){
//			dg[i-cur+n]=udg[i+cur]=col[i]=true;
//			queen_seek(cur+1);
//			dg[i-cur+n]=udg[i+cur]=col[i]=false;
//		}
//	}
//	return;
//} 
//
//int main(){
//	IOS;
//	int T;
//	cin>>T;
//	while(T--){
//		ans = 0;
//		cin>>n;
//		queen_seek(1);
//		cout<<ans<<endl;
//	}
//	return 0;
//}

//int h[N],lp[N],f[N][2001];
//
//int main(){
//	IOS;
//	int n;
//	cin>>n;
//	for(int i=1;i<=n;i++) cin>>h[i];
//	for(int i=1;i<=n;i++) cin>>lp[i];
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=2000;j++){
//			if(j>lp[i]){
//				f[i][j] = max(f[i-1][j],f[i-1][j-lp[i]]+h[i]);
//			}else{
//				f[i][j] = f[i-1][j];
//			}
//		} 
//	}
//	cout<<f[n][2000]+1<<endl;
//	return 0;
//}



int main()
{
    long long x, y, z, k;
    while (cin>>k && k)
    {
        //式子的格式为1/k = 1/x + 1/y + 1/z
        /*
        因为x>=y>=z>k   所以1/x<=1/y<=1/z    又因为1/k = 1/x + 1/y + 1/z <= 3/z  所以 1/k <= 3/z  则z<=3*k
        */
        for (z = k+1; z <= 3*k; z++)
        {
            //先判断两项是否成立,即1/k==1/y+1/z
            //已知k,z,若成立,则所求中y一定为整数,1/y==1/k-1/z, 即 y=k*z/(z-k)
            y=k*z/(z-k);
            if((k*z)%(z-k) == 0 && y>=z)//随着z的递增,y有可能小于z,则判断如果y大于z,则输出式子1/k==1/y+1/z
                printf("1/%lld=1/%lld+1/%lld\n",k,y,z);

            //判断三项是否成立,即1/k=1/x+1/y+1/z
            //已知1/x+1/y的和为1/k-1/z,思路跟上面类似,将1/k-1/z作为一项进行拆分,这个结果可能无法划分为1/某数的形式
            int p = k*z/(z-k);
            for(y=p+1; y <= 2*p+1; y++)
            {
                //因为1/x=1/k-1/y-1/z 所以x=k*y*z/(y*z-k*z-k*y)
                //若式子成立,则x一定为整数
                x=k*y*z/(y*z-k*z-k*y);
                if ((k*y*z) % (y*z-k*z-k*y) == 0 && x>=y && y>=z)//如果x>=y>=z,则输出
                    printf("1/%lld=1/%lld+1/%lld+1/%lld\n",k,x,y,z);
            }
        }
        printf("\n");
    }

    return 0;
}

包含大部分题目

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值