编写程序,将1到9这九个数字分成三个三位数,要求:第2个三位数是第1个三位数的两倍;第3个三位数是第1个

   更新日期:2024.06.01
先回答后面一个
根据定义int a[9];来看,a是指针,指向整型数组a的第1个元素
a+3和a+6也都是指针,分别指向整型数组a的第4个元素和第7个元素

前面那个问题回答起来要麻烦些,因为你要理解了算法的思路才知道代码是想做什么。

首先这个算法是要枚举,范围设置在123~333想必不难理解吧。
现在我举其中一些例子来说明算法思路。
当第一个数等于123时,根据题意,后两个数分别为246和369
先把123拆成数字1,2,3写到数组a的前三个元素中,并且验证写进去的数字都不等于0而且互不相等(这就是你问的*p==0,以及*q==*p的意思)
如果出现0,不在1~9之间自然不行,出现了重复的数字也不符合题意,所以只要出现这两种情况中的任何一种,就要return 0,表示这个数字不行。
当然,1,2,3既没有0也没有重复,所以接下来将246的每一位写到a数组接下来的三个元素中,现在a数组变成了1 2 3 2 4 6
当对第四个元素2进行*q==*p判断时发现与第二个元素相等,所以123肯定不能是第一个数。于是循环到m=124,再重复上面的过程。
如果发现一直到第九个数字都既没有出现0也没有重复,那么满足题意,输出,同时计数。

当然,程序中也有不严谨的地方。比如OK函数检验到出现0和出现重复时返回了0,但是当外层for循环结束时应该有return(1);这样的语句,不然main函数中的if语句永远也判断不出true,所以还需要改进。

这个问题我想了挺久的,有许多方法,最终权衡了一下用数组来做比较好,难点在于要判断三个三位数中的个十百位都不能相等。我的思路是先用循环遍历第一个三位数,然后用第一个三位数与之后两个三位数的关系求出他们,再判断这三个三位数是否符合个十百位互不相等的题目要求。

具体代码如下:(程序附有注释)


#include <stdio.h>
#include<stdlib.h>

int Tput (int a,int b,int c);
void Tsplit (int a, int b[]);
int Ifequal( int a[],int b[] );

main()
{
int i, j, k ;  //循环变量
int a[]={0,1,2,3,4,5,6,7,8,9};  //储存10个个位数
int t1 ;  //第一个三位数三位数
int t2 ;  //第二个三位数三位数
int t3 ;  //第三个三位数三位数

//用三重循环遍历数组a中的元素,生成不同的首个三位数
for(i=1;i<4;i++)  //人为减少第一重循环次数,i作为百位不会大于400
{
for(j=0;j<10;j++)
{
//保证首个三位数是由互不相同的三个数组成
if(i==j)
continue;
for(k=0;k<10;k++)
{
//保证是互不相同的三个数
if(j==k || i==k)
continue;
t1=Tput(a[i],a[j],a[k]);  //生成三位数
//保证第一个三位数的有效性(如果大于1000第三个数就不是三位数)
if(t1*3<1000)
{
int b[3]={0};  //存储第二个三位数的数字组成
int c[3]={0};  //存储第三个三位数的数字组成
int d[3]={a[i],a[j],a[k]};  //存储第一个三位数的数字组成
t2=2*t1;
t3=3*t1;
//将第二第三个三位数分开,存在数组中
Tsplit(t2,b);
Tsplit(t3,c);
//分别判断三个三位数中的元素是否相等,并输出
if(Ifequal(b,c) && Ifequal(b,d) && Ifequal(c,d))
printf("%d,%d,%d
",t1,t2,t3);
}
}
}
}
system("pause");
}

//函数功能:按顺序输入百十个位,输出一个三位数
int Tput (int a,int b,int c)
{
return a*100+b*10+c;
}

//函数功能:输入一个三位数与数组(存储拆分的三位数),拆分为三个数(按百十个位)
void Tsplit (int a, int b[])
{
int i;
for(i=0;i<3;i++)
{
b[i]=a%10;
a=a/10;
}
}

//函数功能:输入两个数组,判断两个数组中的元素是否互不相等,是返回1,不是返回0
int Ifequal( int a[],int b[] )
{
int i,j;
int flag=1;  //判断变量
//判断数组内部元素是否相等
if(a[0]==a[1] || a[0]==a[2] || a[1]==a[2])
flag=0;
if(b[0]==b[1] || b[0]==b[2] || b[1]==b[2])
flag=0;
//判断两个元素之间的元素是否相等
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(a[i]==b[j])
flag=0;
}
}
return flag;
}


xsyhzhb1991 所言甚是

  • 15816909960 :编写程序,将1到9这九个数字分成三个三位数,要求:第2个三位数是第1个...
    松熊炒4267 :答:第2个参数是a, for(p=s; p<s+3 ;p++) 处理 ( a[0] a[1] a[2])组成的 数 第2个参数是a+3, for(p=s; p<s+3 ;p++) 处理 ( a[3] a[4] a[5]) 组成的 数 第2个参数是a+6, for(p=s; p<s+3 ;p++) 处理 ( a[6] a[7] a[8]...
  • 15816909960 :编写程序,将1到9这九个数字分成三个三位数,要求:第2个三位数是第1个...
    松熊炒4267 :答:如果出现0,不在1~9之间自然不行,出现了重复的数字也不符合题意,所以只要出现这两种情况中的任何一种,就要return 0,表示这个数字不行。当然,1,2,3既没有0也没有重复,所以接下来将246的每一位写到a数组接下来的三个元素中,现在a数组变成了1 2 3 2 4 6 当对第四个元素2进行*q==*p判...
  • 15816909960 :用最基本的c语言编程。将1-9这九个数分为三个三位数,要求第一个3位数...
    松熊炒4267 :答:i < N; ++i){printf(" %d ", arrayRaw[i]);}printf("\n");}void trible_check(void){num1 = arrayRaw[0] * 100 + arrayRaw[1] * 10 + arrayRaw[2];num2 = arrayRaw[3]
  • 15816909960 :将1到9这9个数字分成三个3位数,要求第一个3位数正好是第二个3位数的...
    松熊炒4267 :答:include <stdio.h> int pd1(int a){ int x,y,z;x=a%10;y=a/10%10;z=a/100;if(x==y||y==z||z==x)return 0;return 1;} int pd2(int a,int b){ int x,y,z,xx,yy,zz;x=a%10;y=a/10%10;z=a/100;xx=b%10;yy=b/10%10;zz=b/100;if(x==xx||x==yy||x=...
  • 15816909960 :将1、2、3、4、5、6、7、8、9九个数字分成三组,
    松熊炒4267 :答:也就是361,529,784这三组数 --- 很深奥么?我这么写其实算简单了,说一下吧:next_permutation(a.begin(), a.end())这个是标准库函数,专门生成全排列的,比如123的全排列有123,132,213,231,312,321这六个 ,这个函数也可自己实现,不过那个算法就复杂了 有了全排列后,这样的语句fabs(sqrt(s1...
  • 15816909960 :将1,2...9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1...
    松熊炒4267 :答:a[i/100]=1;j=i*2;a[j/100]=1;k=i*3;a[k/100]=1;for(s=0,h=1;h<10;h++)s=s+a[h];if(s==9)printf("i=%d,j=%d,k=%d\n",i,j,k);在完成C++ 标准化的第一个草案后不久,发生了一件事情使得C++标准被极大地扩展了:Alexander stepanov创建了标准模板库(Standard ...
  • 15816909960 :急求C语言程序:将1,2,3,4,5,6,7,8,9共9个数分成三组,组成3个三位数,且...
    松熊炒4267 :答:int check(int a,int b,int c){ int test[9]={0},i; long num = a*1000000+b*1000+c; if(b>1000 || c>1000)return 0;//确保是三位数 for(i = 0;i < 10;i++) { int temp = num%10; num/=10; temp--; if(test[temp] == 0) { ...
  • 15816909960 :编程,将1到9分为3组,是每组的3个数字排列成一个3位的完全平方数。
    松熊炒4267 :答:include <iostream> using namespace std;define a (100*v[0]+10*v[1]+v[2])define b (100*v[3]+10*v[4]+v[5])define c (100*v[6]+10*v[7]+v[8])int v[9]={0,0,0,0,0,0,0,0,0};int is(int x){ for(int i=10;i<=31;++i)if(x==i*i) return i;return...
  • 15816909960 :用VB,,用VB,用VB将123456789这九个数字分成三个三位数,各个数字之间...
    松熊炒4267 :答:Dim a1 As Integer, a2 As Integer, a3 As Integer, myNum1 As Integer, myNum2 As Integer, myNum3 As Integer, myTempStr As String, myOutput As String, i As Integer For a1 = 1 To 9 For a2 = 1 To 9 For a3 = 1 To 9 myNum1 = Val(a1 & a2 & a3)myNum2 = 2 *...
  • 15816909960 :(编程求助)将1到9分为三个三位数,当地一个数是第二个数的二分之一且是...
    松熊炒4267 :答:我想楼主是说当第一个数是第二个数的二分之一,并且是第三个数的三分之一的时候输出这3个数吧?先将1~9分到数组里,穷举所有情况,再将满足条件的输出。该程序主要内容我是参考别人的,只稍作修改而已。能输出4组数据如下:192 384 576 219 438 657 273 546 819 327 654 981 include <stdio...
  • 相关链接

    欢迎反馈与建议,请联系电邮
    2024 © 视觉网