用c语言程序设计这道题,求大神讲解,指教,谢谢大神 表情了!

共有 725 人关注过本帖
标题:求大神指点,这道题怎么做啊
等 级:新手上路
帖 子:10
结帖率:33.33%
&&已结贴√
&&问题点数:20&&回复次数:9&&&
求大神指点,这道题怎么做啊
九数组分数
1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法?
下面的程序实现了该功能,请填写划线部分缺失的代码。
#include &stdio.h&
void test(int x[])
&&& int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3];
&&& int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8];
&&& if(a*3==b) printf(&%d / %d\n&, a, b);
void f(int x[], int k)
&&& int i,t;
&&& if(k&=9){
&&&&&&&&test(x);
&&& for(i=k; i&9; i++){
&&&&&&&&{t=x[k]; x[k]=x[i]; x[i]=t;}&&
&&&&&&&&f(x,k+1);
&&&&&&&&_____________________________________________ // 填空处
int main()
&&& int x[] = {1,2,3,4,5,6,7,8,9};
&&& f(x,0);&&&
&&& return 0;
注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。
搜索更多相关主题的帖子:
等 级:黑侠
帖 子:107
专家分:534
这是一个典型的全排列组合算法,递归后将交换的数据还原即可,复制递归前的那行代码即可,如果非要不一样,可把k、i对调,结果一样。
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
若是用排列组合的方法,如题目中的方法,确实是难理解。我想出来一个好理解但是比较死的办法。设N为分子,M为分母,且M=N*3,由于有9个数字,所以N只能是四位数,M是五位数。试想N的三倍是五位数,且N的四个数字不能重复,所以N最小是3412,同理N最大是9876。在这个范围内穷举每一个数,只要M*10000+N,即9个数字组成的数没有相同的数字而且没有数字0即可。下面是我的算法。
程序代码:#include &stdio.h&
#include &stdlib.h&
#include &stdbool.h&
int main()
&&& bool isSameNumberExistsInTwoNumbers(int m,int n);
&&& int N,M;
&&& for(N=<font color=#2;N&=<font color=#6;N++)
&&&&&&&&M=N*<font color=#;
&&&&&&&&if(isSameNumberExistsInTwoNumbers(M,N))
&&&&&&&&&&&&printf(&%d/%d=1/3\n&,N,M);
&&& return <font color=#;
bool isSameNumberExistsInTwoNumbers(int m,int n)
&&& int i,j,total=m*<font color=#00+n;
&&& char numChar[<font color=#];&&//注意长度10是因为末尾要加一个字符串结束标志'\0'
&&& itoa(total,numChar,<font color=#);&&//将这个9位数转换成字符串
&&& for(i=<font color=#;i&<font color=#;i++)
&&&&&&&&for(j=i+<font color=#;j&<font color=#;j++)
&&&&&&&&&&&&//比较是否有相同的数字或者有0
&&&&&&&&&&&&if(numChar[i]==numChar[j]||numChar[i]=='<font color=#')&&return false;
&&& if(numChar[<font color=#]=='<font color=#')&&return false;&&//检查第9个,上面没有检查到
&&& return true;
下面是程序的运行结果,大家看下对不对。
附件: 您没有浏览附件的权限,请
&&&唯实惟新 至诚致志
等 级:黑侠
帖 子:107
专家分:534
可行,不过楼主题意是帮他填空。另判断是否重复还有更高效的算法,不需要转换为字符串,如下:
bool isSameNumberExistsInTwoNumbers(int m,int n)
&&& int i,total=m*10000+n;
&&& char numChar[10]={0};&&//注意长度10是因为末尾要加一个字符串结束标志'\0'
&&& for(;total/=10)
&&&&&&&&&numChar[total%10]++;
&&& for(i=9;i;i--)
&&&&&&&&&if(numChar[i]!=1)
等 级:版主
威 望:179
帖 子:4189
专家分:22004
回复 4楼 拉链
bool isSameNumberExistsInTwoNumbers(int m,int n)
&&& unsigned mark = 0;
&&& for( n=n*100000+m; n!=0; n/=10 )
&&&&&&&&mark |= 1u&&(n%10);
&&& return mark==0x3FE;
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
回复 5楼 rjsp
蒙了,请问位移运算怎么做到的。
&&&唯实惟新 至诚致志
等 级:版主
威 望:179
帖 子:4189
专家分:22004
回复 6楼 qq
遇到1就将第一bit设为1
遇到2就将第二bit设为1
遇到3就将第三bit设为1
遇到9就将第九bit设为1
最后看一下是不是二进制的
等 级:黑侠
帖 子:107
专家分:534
回复 5楼 rjsp
回复5楼:就是把数组变成位。得到一个数的各位数据后,把1左移到该位并与mark或,如果9个数不同,则最终的数应该是二进制11 fe。
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
回复 8楼 拉链
咯,在纸上比划了半天,才明白怎么回事,不得不说,此方法确实精妙无比。
&&&唯实惟新 至诚致志
版权所有,并保留所有权利。
Powered by , Processed in 0.030506 second(s), 9 queries.
Copyright&, BCCN.NET, All Rights Reserved[程序设计]请教几道C语言编程题,急救啊,谢谢!
1.给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a的bit 3。在以上两个操作中,要保持其它位不变。 2.有双向循环链表结点定义为: struct node { struct node *front,* }; 有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除 3.编程实现:找出两个字符串中最大公共子字符串,如&abccade&,&dgcadde&的最大子串为&cad& 4.编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数
没人知道吗?不可能吧
怎么看都象是书中的例题上课的时候干嘛去了?FT
当然有人知道,但你还是找同学帮忙把
第一题很简单,按位与和或,不解释。第二题最笨的办法就是遍历链表,复杂度为O(m*n)。第三题提供一个笨办法,对在a串中找b串的所有可能,比如上面的例子先找dgcadde,再找dgcadd,dgcad...记录最大串长度,然后再从gcadde开始找。第四题可以用数组记录每一位,用除2的方法得到2进制,16进制就很容易了。好久不搞这些,数据结构的很多东西都忘记得差不多了,楼主最好去csdn问问。
以前看到过,现在不记得了,学什么C,用C++吧,面向对象的好得多
yikuku的回答最搞笑
大家还在看

我要回帖

更多关于 c语言 数据类型 讲解 的文章

 

随机推荐