2023华科3 公共因子

题目

现在有1、2、3、4、5、6、7、8、9共九个数字.要求填入下表是等式满足,并且1不能作为分母,任一分式的分子分母都不可以有除1以外的公共因子。输出所有可能的等式。
[ ] [ ] / [ ] + [ ] [ ] / [ ] = [ ] [ ] / [ ]

初见

什么意思捏?那我搞个全排列?这个b题怎么写,我的想法是首先算出所有的【】【】/【】 然后再排列组合 但是我在想这个东西意思是说【】【】/【】结果是小数是吧,啊这这这这这这,被为难了捏 ,try try

筛【】【】/【】

#include<stdio.h>
bool huzhi(int a,int b){
	for(int i=1;i<=a/2;i++){
		//有公因子 
		printf("%d %d\n",a,b);		if(a%i==0 && b%i==0&&i!=1) return true;
	}
	return false;
}
int member(int a[],int b[],int c[]){ 
	//[i][j]/[k]  分母不能是1 三个for筛一下,但是筛出来存在哪里呢,我还不知道能筛出来多少个,这个长度怎么设置?可变数组吗,那我整个可变的三维数组
	//被选过的数字是不可以再被选择的,感觉一下子少了很多
	int index=0; 
	int fenzi,fenmu;
	for(int i=1;i<10;i++){
		for(int j=1;j<10;j++){
			for(int k=2;k<10;k++){
				if(i!=j&&i!=k&&j!=k){
				fenzi = i*10+j;
				fenmu = k;
				if(huzhi(fenzi,fenmu)) continue;
				else{
					a[index]=i;
					b[index]=j;
					c[index]=k;
					index++;
				}
			}
			}
		}
	} 
	return index;
}
int main(){
	int len;
	int a[700]={0};
	int b[700]={0};
	int c[700]={0};
	len = member(a,b,c);
	
}

不知道对不对,将就看

然后要开始组合看可以不可以满足了

嘻嘻 又写崩了 烦死了 附上错误代码可以看出我有多菜了

#include<stdio.h>
bool huzhi(int a,int b){
	for(int i=1;i<=a/2;i++){
		//有公因子 
		if(a%i==0 && b%i==0&&i!=1) return true;
	}
	return false;
}
int member(int a[],int b[],int c[]){ 
	//[i][j]/[k]  分母不能是1 三个for筛一下,但是筛出来存在哪里呢,我还不知道能筛出来多少个,这个长度怎么设置?可变数组吗,那我整个可变的三维数组
	//被选过的数字是不可以再被选择的,感觉一下子少了很多
	int index=0; 
	int fenzi,fenmu;
	for(int i=1;i<10;i++){
		for(int j=1;j<10;j++){
			for(int k=2;k<10;k++){
				if(i!=j&&i!=k&&j!=k){
				fenzi = i*10+j;
				fenmu = k;
				if(huzhi(fenzi,fenmu)) continue;
				else{
					a[index]=i;
					b[index]=j;
					c[index]=k;
					index++;
				}
			}
			}
		}
	} 
	return index;
}
bool notexis(int a,int b[],int len){
	for(int i=0;i<len;i++){
		if(b[i]==a) return false;
	}
	return true;
}
int main(){
	int len;
	int a[700]={0};
	int b[700]={0};
	int c[700]={0};
	len = member(a,b,c);
	
	for(int i=0;i<len;i++){
		for(int j=0;j<len;j++){
			for(int k=0;k<len;k++){
				int d[9]={0}; 
				//九个数字不相等,也就是说,1,2,3,4,5,6,7,8,9要在这九个数字里都出现,真讨厌C不能出个in吗 ,算了还是遍历吧
				d[0]=a[i];
				d[1]=b[i];
				d[2]=c[i];
				d[3]=a[j];
				d[4]=b[j];
				d[5]=c[j];
				d[6]=a[k];
				d[7]=b[k];
				d[8]=c[k];
				bool tag=true;
				for(int h=1;h<10;h++){
					if(notexis(h,d,9)) tag=false;
					break;
					}
				if(tag==false) break;
				else{
					if((a[i]*10+b[i])*c[j]*c[k]+(a[j]*10+b[j])*c[i]*c[k]==(a[k]*10+b[k])*c[i]*c[j]) 
					printf("%d%d/%d + %d%d/%d = %d%d/%d\n",a[i],b[i],c[i],a[j],b[j],c[j],a[k],b[k],c[k]);
				}
				}
			}
		}
	return 0;
}

我打算直接九个for了有点讨厌

#include<stdio.h>
bool huzhi(int a,int b){
	for(int i=1;i<=a/2;i++){
		//有公因子 
		if(a%i==0 && b%i==0&&i!=1) return false;
	}
	return true;
}
int main(){
	int a,b,c,d,e,f,g,h,i;
	
	for(a=1;a<10;a++){
		for(b=1;b<10;b++){
			if(a!=b){
				for(c=2;c<10;c++){
					if(c!=a&&c!=a){
						for(d=1;d<10;d++){
							if(d!=a&&d!=b&&d!=c){
								for(e=1;e<10;e++){
									if(e!=a&&e!=b&&e!=c&&e!=d){
										for(f=2;f<10;f++){
											if(f!=a&&f!=b&&f!=c&&f!=d&&f!=e){
												for(g=1;g<10;g++){
													if(g!=a&&g!=b&&g!=c&&g!=d&&g!=e&&g!=f){
														for(h=1;h<10;h++){
															if(h!=a&&h!=b&&h!=c&&h!=d&&h!=e&&h!=f&&h!=g){
																for(i=2;i<10;i++){
																	if(i!=a && i!=b && i!=c && i!=d && i!=e && i!=f && i!=g && i!=h){
																		int fenzi1,fenzi2,fenzi3,fenmu1,fenmu2,fenmu3;
																		fenzi1=a*10+b;
																		fenmu1=c;
																		fenzi2=d*10+e;
																		fenmu2=f;
																		fenzi3=g*10+h;
																		fenmu3=i;
																		if(huzhi(fenzi1,fenmu1)==true && huzhi(fenzi2,fenmu2)==true && huzhi(fenzi3,fenmu3)==true){
																			if(fenzi1*fenmu2*fenmu3+fenzi2*fenmu1*fenmu3==fenzi3*fenmu1*fenmu2) 
																			{
																				printf("%d/%d+%d/%d=%d/%d\n",fenzi1,fenmu1,fenzi2,fenmu2,fenzi3,fenmu3);
																			}
																		}
																		else continue;
																	}
																}
															}
														}
													}
												}
											}
										}
									}
								}
							}
						}
					}
				} 
			}
			
		}
	}
	return 0;
}

别看他夸张但他真的可以,服

我的朋友说全排列可以用dfs

https://blog.csdn.net/loon_zy/article/details/120938491
占一个可靠答案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值