
C语言里的1~9分成1:2:3的三个3位数 问题
#include<stdio.h>intok(intt,int*z);inta[9];voidmain(){intm,count=0;for(m=123;m<=333;m...
#include<stdio.h>
int ok(int t,int *z);
int a[9];
void main()
{
int m,count=0;
for(m=123;m<=333;m++) /*试探可能的三位数*/
if(ok(m,a)&&ok(2*m,a+3)&&ok(3*m,a+6)) /*若满足题意*/
printf("No.%d: %d %d%d\n",++count,m,2*m,3*m); /*输出结果*/
}
int ok(int t,int *z) /*分解t的值,将其存入z指向的三个数组元素,若满足要求返回1*/
{
int *p1,*p2;
for(p1=z;p1<z+3;p1++)
{
*p1=t%10; /*分解整数*/
t/=10;
for(p2=a;p2<p1;p2++) /*查询分解出的数字是否已经出现过*/
if(*p1==0||*p2==*p1)return0; /*若重复则返回*/
}
return 1; /*否则返回1*/
求大神指教几个问题,第一个,a[9]在这里有什么作用?这里的调用函数部分的 for(p2=a;p2<p1;p2++) 具体有什么作用?return在这里怎么运行的?return 0 的时候是返回主调函数还是接着在这个调用函数里运行直到没有重复的数字?然后return1就表示返回主调函数了么? 展开
int ok(int t,int *z);
int a[9];
void main()
{
int m,count=0;
for(m=123;m<=333;m++) /*试探可能的三位数*/
if(ok(m,a)&&ok(2*m,a+3)&&ok(3*m,a+6)) /*若满足题意*/
printf("No.%d: %d %d%d\n",++count,m,2*m,3*m); /*输出结果*/
}
int ok(int t,int *z) /*分解t的值,将其存入z指向的三个数组元素,若满足要求返回1*/
{
int *p1,*p2;
for(p1=z;p1<z+3;p1++)
{
*p1=t%10; /*分解整数*/
t/=10;
for(p2=a;p2<p1;p2++) /*查询分解出的数字是否已经出现过*/
if(*p1==0||*p2==*p1)return0; /*若重复则返回*/
}
return 1; /*否则返回1*/
求大神指教几个问题,第一个,a[9]在这里有什么作用?这里的调用函数部分的 for(p2=a;p2<p1;p2++) 具体有什么作用?return在这里怎么运行的?return 0 的时候是返回主调函数还是接着在这个调用函数里运行直到没有重复的数字?然后return1就表示返回主调函数了么? 展开
展开全部
a[9]在这里用于保存一个三位数及其2倍和3倍数的每一位,比如开始时m=123,则调用ok函数:ok(123, a),会在 a[0]中 保存3 (123 % 10 = 3),,a[1]保存2,a[2]保存1,它的二倍数246保存在a[3]-a[5]中(调用ok(m*2, a+3),但要判断一下前面是否有重复的数,这里先将6保存在a[3],4保存在a[4],2保存在a[5],这时从数字a中已经存在的数中比较发现有2(a[1]中),则返回0,说明123这个数不满足条件。
return 0返回到主函数,然后在主调函数中将m+1,循环调用下一个ok(m, a)
return 1也是返回到主调函数
return 0返回到主函数,然后在主调函数中将m+1,循环调用下一个ok(m, a)
return 1也是返回到主调函数
追问
还是不太懂p2<p1这个句子到底是怎么验证重复的。。p2=a的时候,p2这个不是等于a的首地址么??也就是a[0]..那p1不也是等于z,不是a的首地址么??不太懂指针这一块,能再说的详细一点点么??谢谢!!~~
追答
在主调函数中,每次循环ok函数最多被调用三次,对应的z分别等于a,a+3和a+6
p1初始等于z,但是通过循环每次加一,p1分别指向z,z+1和z+2,对应的地址也分别是a,a+1,a+2(当z=a时),a+3,a+4,a+5(当=a+3时),a+6,a+7和a+8(z=a+6时),因此for(p2=a; p2<p1; p2++),依次循环就可以分别遍历到a,a+1,a+2...a+7这几个地址
2014-06-23 · 知道合伙人软件行家

知道合伙人软件行家
采纳数:429
获赞数:1131
某公司嵌入式开发工程师; 熟悉VC++/C/MFC,Linux驱动,STM32,FPGA,Allegro/Pads及硬件电路设计
向TA提问 私信TA
关注

展开全部
a[9]保存本次分解出来的数字,方便下次分解中比较是否有重复。
追问
额。。在调用函数里体现出来这个么??那Z不是也是保存本次分解的数字么??有什么不同??
追答
z只是个指针, 其实质指向a[9]这个数组。a[9]为z提供内存空间,对它们的操作结果是一样的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询