| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1640 人关注过本帖
标题:求助C语言程序,急!!!!!在线等!!!!
只看楼主 加入收藏
himpo
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:192
专家分:123
注 册:2008-5-16
收藏
得分:0 
我知道你错在哪里了!
#include <stdio.h>

long fun(long n,long a,long b,long c)         //加上参数类型吧。。
{
 long k;
 for(k=1;k<n;k++)                            //k从1开始,毕竟是自然数
    {
     if(k*b==b*n*(n+1)/2-(n-1)*(a*b+c))      //(n-1)*(a*b+c)会很大,所以定义long,否则溢出。。(重点)
     return k;                               //改成*b是为解决3/2=1的问题,不说这个了
    }
return 0;                                   //避免找不到k就不返回函数值。。
}

int main()
{
 long a,b,c,k,n;
 scanf("%ld%ld%ld",&a,&b,&c);
 for(n=1;;n++)
    {
     k=fun(n,a,b,c);
     if(k) break;
    }
 printf("%ld",k);
 return 0;
}
2008-07-01 19:05
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
用整数是不行的。


并且最好不要让除数为 0。

[[it] 本帖最后由 cosdos 于 2008-7-1 19:11 编辑 [/it]]

—>〉Sun〈<—
2008-07-01 19:07
himpo
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:192
专家分:123
注 册:2008-5-16
收藏
得分:0 
回复 12# cosdos 的帖子
还是你牛。。
2008-07-01 19:08
misty0311
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-7-1
收藏
得分:0 
回复 10# cosdos 的帖子
恩 对了 多谢啦
2008-07-01 19:11
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
不用谢。

-------------------------------

浮点数比较大小——这个很重要,浮点数一般不能直接比较,只能比较近似值。

[[it] 本帖最后由 cosdos 于 2008-7-1 19:27 编辑 [/it]]

—>〉Sun〈<—
2008-07-01 19:14
misty0311
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-7-1
收藏
得分:0 
回复 15# cosdos 的帖子
哎呀 又要碰到麻烦了 要麻烦你了
题目要求输出格式是
输入:文件中的第一行只有一个数M,表明随后的M行每行为一个问题的描述信息。每行都有3个数,分别为A,B,C。
输出:依次输出各个问题中的K。每行输出一个问题的解。
示例:
3
35 17  7
1  2   1
2  2   1
输出:
7
3
1
#include <stdio.h>
int fun(int n,double a[],double b[],double c[])
{int k;
double sum;
for(k=1;k<=n;k++)
{
sum=(double)((n+1)*n)/2.0;
sum-=k;
sum/=n-1;
sum-=(a*b+c)/b;
if(sum>-0.000001&&sum<0.000001)
return k;
}
return 0;
}
find(double a[],double b[],double c[])
{
int n,k;
while(getchar()!='\n');
for(n=2;;n++)
{
k=fun(n,a,b,c);
if(k!=0)
break;
return k;
}
getchar();
return 0;
}
main()
{int i,m,k[80];
double a[80],b[80],c[80];
scanf("%d",&m);
for(i=0;i<m;i++)
{scanf("%d %d %d",&a[i],&b[i],&c[i]);
k[i]=find(a,b,c);
printf("%d\n",k[i]);
}}

数组之见不能用*号乘的呀 有语法问题 应该怎么改呢?
2008-07-01 20:02
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
(a[i] * b[i] + c[i]) / b[i]

—>〉Sun〈<—
2008-07-01 21:53
misty0311
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-7-1
收藏
得分:0 
回复 18# cosdos 的帖子
#include <stdio.h>
int fun(int n,double m1,double m2,double m3)
{int k;
double sum;
for(k=1;k<=n;k++)
{
sum=(double)((n+1)*n)/2.0;
sum-=k;
sum/=n-1;
sum-=(m1*m2+m3)/m2;
if(sum>-0.000001&&sum<0.000001)
return k;
}
return 0;
}
find(double m1,double m2,double m3)
{
int n,k;
for(n=2;n>0;n++)
{
k=fun(n,m1,m2,m3);
if(k!=0)
return k;
}
return 0;
}
main()
{
int i,m,k[80];
double a[80],b[80],c[80],m1,m2,m3;
do{
i=scanf("%d",&m);
while(getchar() != '\n');
}while(i!=1||m>80);
for(i=0;i<m;i++)
{
scanf("%lf%lf%lf",&a[i],&b[i],&c[i]);
m1=a[i];
m2=b[i];
m3=c[i];
k[i]=find(m1,m2,m3);
}
for(i=0;i<m;i++)
{
printf("%d\n", k);
}
}

还是不对的  FIND函数里的FOR循环 怎么是N>0?
2008-07-01 21:58
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
#include <stdio.h>

/*  测试通过。
3
35 17  7
1  2   1
2  2   1
*/

int fun(int n, double a, double b, double c)
{
    int k;
    double sum;

    for(k = 1; k <= n; k++)
    {
        // printf("  - K = %d\n", k);
        
        sum =  (double)((n + 1) * n) / 2.0;
        sum -= k;
        sum /= n - 1;
        sum -= (a * b + c) / b;
        if(sum > -0.000001 && sum < 0.000001)
            return k;
    }
    return 0;
}



int find(double m1,double m2,double m3)
{
    int n, k;
    for(n = 2; n > 0; n++)
    {
        k = fun(n, m1, m2, m3);
        if(k != 0)
            return k;
    }
    return 0;
}

main()
{
    int i,m,k[80], temp;
    double a[80], b[80], c[80], m1, m2, m3;
   
    do {
         
        temp = scanf("%d",&m);
        while(getchar() != '\n');
    }while(temp != 1 || m > 80);
      
    for(i=0;i<m;i++)
    {
        do {
            temp = scanf("%lf %lf %lf", &a[i], &b[i], &c[i]);
            while(getchar() != '\n');
        }while(temp != 3 || b[i] == 0);
        m1=a[i];
        m2=b[i];
        m3=c[i];
        k[i] = find(m1,m2,m3);
    }
    for(i=0;i<m;i++)
    {
        printf("%d\n", k[i]);
    }
   
    getchar();
   
}

—>〉Sun〈<—
2008-07-01 22:02
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
find()  for n > 0  // 防止整数益处
int 最大能够表示正整数为 2^31 - 1 (2的31次方-1)

当 n = 2^31 - 1 后,
再 n + 1 这样变为了一个负数。

[[it] 本帖最后由 cosdos 于 2008-7-1 22:33 编辑 [/it]]

—>〉Sun〈<—
2008-07-01 22:08
快速回复:求助C语言程序,急!!!!!在线等!!!!
数据加载中...
 
   



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

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