首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

程序

2012-02-16 
求一个程序题目:将1,2,3,4,5,6,7,8,9共9个数分成三组,组成3个三位数,且使这3个三位数构成1:2:3的比例,例如

求一个程序
题目:将1,2,3,4,5,6,7,8,9共9个数分成三组,组成3个三位数,且使这3个三位数构成1:2:3的比例,例如:3个三位数192,384,576满足以上条件.192:384:576=1:2:3。试求出所有满足条件的3个三位数。

[解决办法]
//最大的三位数是987,所以最大的第一分组数是329
#include "stdio.h "

int check(int SourceNum,int CheckNum)
{
int i;
int StrSource[3];
int StrCheck[3];

for(i=0;i <3;i++)
{
StrSource[i]=SourceNum % 10;
SourceNum = SourceNum/10;

StrCheck[i]=CheckNum % 10;
CheckNum = CheckNum /10;

if(StrSource[i]==0||StrCheck[i]==0)
return 1;

if(StrSource[i]==StrCheck[i])
return 1;
else
{
switch(i)
{
case 1:
if (StrSource[i]==StrSource[i-1])//自身相同位检查
return 1;
if (StrCheck[i]==StrCheck[i-1])
return 1;

if(StrSource[i]==StrCheck[i-1])//相同位检查
return 1;
if(StrCheck[i]==StrSource[i-1])
return 1;
break;
case 2:
if(StrSource[i]==StrSource[i-1]||StrSource[i]==StrSource[i-2])//自身相同位检查
return 1;
if(StrCheck[i]==StrCheck[i-1]||StrCheck[i]==StrCheck[i-2])
return 1;

if(StrSource[i]==StrCheck[i-1]||StrSource[i]==StrCheck[i-2])
return 1;
if(StrCheck[i]==StrSource[i-1]||StrCheck[i]==StrSource[i-2])
return 1;
break;
}
}
}

return 0;
}
int main()
{
int i,j;
int SNum,TNum;

printf( "符合的分组如下:\n ");
for (i=139;i <329;i++)
{
SNum=i*2;
if( check(SNum,i)==1 )
continue;
else
{
TNum=i*3;
if( check(TNum,i)==1 )
continue;
else if( check(TNum,SNum)==1 )
continue;
else
printf( "%d %d %d\n ",i,SNum,TNum);
}
}
return 0;
}
[解决办法]
#include <iostream>
using namespace std;

bool Cmp(int i,int j,int k,const int A[9],bool B[9])
{
int t,m;
B[i]=B[j]=B[k]=true;
m = A[i]*200+A[j]*20+A[k]*2;
t=m%10-1;
if(B[t])return false;
B[t]=true;
t= (m/10)%10-1;
if(B[t])return false;
B[t]=true;
t = m/100%10-1;
if(B[t])return false;
B[t]=true;
int n = A[i]*300+A[j]*30+A[k]*3;
t=n%10-1;
if(B[t])return false;
B[t]=true;
t=(n/10)%10-1;
if(B[t])return false;
B[t]=true;
t=n/100%10-1;
if(B[t])return false;
return true;
}

void Show()
{
const int A[9]={1,2,3,4,5,6,7,8,9};
bool B[9];
int n;
for(int i=0;i <3;i++){
for(int j=0;j <9;j++){
if(i==j)continue;
for(int k=0;k <9;k++){
if(i==k||j==k)continue;
B[0]=B[1]=B[2]=B[3]=B[4]=B[5]=B[6]=B[7]=B[8]=false;
if(Cmp(i,j,k,A,B)){
n=A[i]*100+A[j]*10+A[k];
cout < < n < < " : " < <2*n < < " : " < <3*n < <endl;}}}}
}

int main()
{
Show();
return 0;
}

热点排行