题目
现在有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
占一个可靠答案