| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1113 人关注过本帖, 1 人收藏
标题:C程序,做数学需要,真心求助,很急的!
只看楼主 加入收藏
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:5 
回复 9楼 wang155423
b版的意思是把4楼给的函数里的a都换成x,结合你的题中例子或许你会更好理解一点,可能会有头绪。
2012-10-11 23:10
wang155423
Rank: 6Rank: 6
等 级:侠之大者
帖 子:216
专家分:408
注 册:2011-9-4
收藏
得分:0 
回复 11楼 小赵q1
可是还是没有头绪啊
2012-10-12 08:15
菜鸟一支
Rank: 6Rank: 6
来 自:何美杭
等 级:侠之大者
威 望:1
帖 子:121
专家分:456
注 册:2012-10-10
收藏
得分:5 
支持3楼,可以将0~2^m的十进制数用二进制表示。

小弟何美杭,所发表的都仅代表个人观点,欢迎批评指正。
2012-10-12 08:46
爱闹的娃
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:265
专家分:975
注 册:2011-10-23
收藏
得分:0 
结合b版的思路我搞出来了,唉........b版的方式好啊!!!学习了
程序如下:
程序代码:
#include<stdio.h>
#include<math.h>
int f(int a)
{
  int c;
  for(c=0; a; a >>= 1) c += a & (a >> 1) & 1;
  return c;
}
int main()
{
  int n=0;

  int i=0;

  printf("please input the data_");

  scanf("%d",&n);

  for(i;i<pow(2,n);++i)
  {
      if(i>0)
      {
         printf(",");
      }
     printf("%d",f(i));
  }


    return 0;
}

2012-10-12 08:53
风之子MIKEY
Rank: 3Rank: 3
来 自:江西省抚州市
等 级:论坛游侠
帖 子:39
专家分:108
注 册:2012-9-25
收藏
得分:10 
int f(int x,int m)
{
    int i=1;
    int sum=0;
    for(int j=1;j<m;j++)
    {
        sum+=((i*2 & x)>>j)*((i & x)>>(j-1));
        i=i*2;

    }
  return sum;
}
main()
{
    int m,x;
    x=1;
    printf("请输入m值:");
    scanf("%d",&m);////////////////////m为个数
    for(int i=0;i<m;i++)x*=2;////X为可组成的组合数如M=3则可有8组
    for(i=0;i<x;i++)
    {
        printf("%d ",f(i,m));////I为各种组合之一,M取I的小M位
    }
    return 1;
}
2012-10-12 09:32
菜鸟一支
Rank: 6Rank: 6
来 自:何美杭
等 级:侠之大者
威 望:1
帖 子:121
专家分:456
注 册:2012-10-10
收藏
得分:10 
我是个新手,前面两位的代码有些还看不懂。自己编了一个:
#include <stdio.h>
#include <math.h>
void main()
{    int q=0,n=1,x,i,m,p;
    printf("Iput m");
    scanf("%d",&m);
    for(i=0;i<pow(2,m);i++)
    {p=i;
        do
            {
            x=n*(p%2);
            q+=x;
            n=p%2;
            p=p/2;
        }while (p!=0);
    if(i%2==0)
    printf("%d,",q);
    if(i%2==1)
        printf("%d,",(q-1));
    q=0;n=1;

}
}

小弟何美杭,所发表的都仅代表个人观点,欢迎批评指正。
2012-10-12 09:42
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:10 
好吧,解释一下

由于x[i]的取值只有0和1,那么x[i]*x[j]的结果等价于x[i]&x[j]

用整型值x的每一位表示x[i],那么x[i]*x[i+1]相当于x & (x >> 1)

而它们的和相当于数x中位为1的数量

再送一段我完成的代码
程序代码:
#include<stdio.h>

int f(int x)
{
    int c;
    for(x &= x >> 1, c = 0; x; x >>= 1) c += x & 1;
    return c;
}

int main()
{
    int m, i;
    while(printf("Input m[1-30]:"), scanf("%d", &m), m < 1 || m > 30);
    for(i = 0; i < 1 << m; printf("%d ", f(i++)));
    return 0;
}

重剑无锋,大巧不工
2012-10-12 11:26
菜鸟一支
Rank: 6Rank: 6
来 自:何美杭
等 级:侠之大者
威 望:1
帖 子:121
专家分:456
注 册:2012-10-10
收藏
得分:0 
b版厉害额

小弟何美杭,所发表的都仅代表个人观点,欢迎批评指正。
2012-10-12 11:32
风之子MIKEY
Rank: 3Rank: 3
来 自:江西省抚州市
等 级:论坛游侠
帖 子:39
专家分:108
注 册:2012-9-25
收藏
得分:0 
太厉害了,不拘一格
2012-10-12 12:57
wang155423
Rank: 6Rank: 6
等 级:侠之大者
帖 子:216
专家分:408
注 册:2011-9-4
收藏
得分:0 
回复 17楼 beyondyf
佩服佩服,代码能够如此简洁,不知道你怎么思考的,怎么想得这么深
2012-10-12 19:20
快速回复:C程序,做数学需要,真心求助,很急的!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052346 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved