回 帖 发 新 帖 刷新版面

主题:哪位朋友 帮忙看看 这题,小妹 感激不尽 了 !

这是个数据结构的课程设计题,希望能教我大概的思路及所要用到的方法,谢谢朋友!!!:

设计程序设计安从大到小的次序依次输出函数f(a,b)=2*a2(平方)+b2(平方)的最小的100个函数值及相应的两个参数值,其中a和b均为自然数。

注:用C++语言编程

回复列表 (共16个回复)

沙发


做出来了,发上来哈

板凳

作业要自己做

3 楼


不是说 学问 学问不懂就要问吗 我自己一点头绪都没有所以只是 希望大家给点思路~~~

4 楼

找出这些数存好,然后排序输出

5 楼

//小弟想了一个方法,不知道正确否 请大家指出错误  表达能力有限不知道说清楚没有
//如果a取x(位整数)相当于y取2(1/2次方)*x 由排列组合的知识  则a有x+1种取法(取0--x)  b有2(1/2次方)*x+1
//两者的乘积〉=100  取最小的x=8   2(1/2次方)*x=11(全取整数)此时  2*a2(平方)+b2(平方)=249
//所以前100个函数值肯定不会超过249 由于a,b可以去0,因此b在a=0时不超过(249开根号后)15   a在b=0时不超过11
//所以在a为[0--11] b 为[1--15] 中取值 
#include<iostream>
using namespace std;
const int max=249,bmax=15,amax=11;
const int nxiang=100;
struct xiang
{
    int data;
    int a,b;
};
void abc(int aa[],int bb[],xiang* & cc)
{
    for(int i=0;i<max;i++)
        cc[i].data=0;//
    int k=0;
    for(i=0;i<=amax;i++)
    {
        bb[i]=i*i;
        aa[i]=2*i*i;
        cc[bb[i]].data=1;
        cc[bb[i]].a=cc[bb[i]].b=i;
        cc[aa[i]].data=1;
        cc[aa[i]].a=cc[aa[i]].b=i;
        k++;
    }
    for(i=amax+1;i<=bmax;i++)
    {
        bb[i]=i*i;
        cc[bb[i]].data=1;
        cc[bb[i]].a=cc[bb[i]].b=i;
        k++;
    }
}

void jiSuan(int aa[],int bb[],xiang* &cc)
{
    int k,i,j;
    
    for(i=0;i<=amax;i++)
        for(j=0;j<=bmax;j++)
        {
           k=aa[i]+bb[j];
           if(k>max)  
               break;
           else
           {cc[k].data=1;cc[k].a=i;cc[k].b=j;}
        }
}

void jieguo(xiang* cc,xiang* &result)
{
    int n=nxiang;
    for(int i=0;i<=max;i++)
    {
        if(cc[i].data==1)
        {result[--n].data=i;result[n].a=cc[i].a;result[n].b=cc[i].b;}

        if(n==0)
            break;
    }
                
}
void shuchu(xiang* result)
{
    int k=1;
    for(int i=0;i<nxiang;i++)
    {
        cout<<"a="<<result[i].a<<" b="<<result[i].b<<"值为:"<<result[i].data<<" ";
        if(k++%5==0) cout<<endl;
    }
}

int main()
{
    int aa[amax+1],bb[bmax+1];
    xiang *result=new xiang[nxiang],*cc=new xiang[max];
    abc(aa,bb,cc);
    jiSuan(aa,bb,cc);
    jieguo(cc,result);
    shuchu(result);
    getchar();
    //delete result;
    //delete cc;
    return 0;
}

6 楼

#include <iostream.h>
    int count = 1;
    int sum = 0;
int fx(int a,int b)
{
        return 2*a*a + b*b;
}
void f(int temp,int a,int b)
{
        
        cout<<"a = " + a +",b = " + b + ",f(a,b) = " + fx(a,b)<<endl;
        if (temp== 100)
            return;
        if (fx(a,b+1)>fx(a+1,b-1))
        {
            f(++temp,++a,--b);
        }
            
        else
            f(++temp,a,++b);
}
void main()
{
     f(count, 0, 0);
}
没测试。。。

7 楼

public class My{
    int count = 1;
    int sum = 0;
    int fx(int a,int b)
    {
        return 2*a*a + b*b;
    }
    void f(int temp,int a,int b)
    {
        
        System.out.println("a = " + a +",b = " + b + ",f(a,b) = " + fx(a,b));
        if (temp== 100)
            return;
        if (fx(a,b+1)>fx(a+1,b-1))
        {
            f(++temp,++a,--b);
        }
            
        else
            f(++temp,a,++b);
    }
    public static void main(String[] args)
    {
    
        My m = new My();
        m.f(m.count, 0, 0);
    }

}

8 楼

6,7楼的结果好像不对呢

9 楼

是不对,谢谢楼上的,我改下

10 楼


 没想出来好的方法

public class My {
    int count = 0;
    int fx(int a,int b)
    {
        return 2 * a * a + b * b;
    }
    void f()
    {
        for( int i = 0; i < 243; i++ )
        {
            
            for (int j = 0; fx(j,0) <= i ;j++)
            {                
                for (int k = 0; fx(j,k) <= i ;k++)
                {
                    
                    if (fx(j,k) == i)
                    {
                        System.out.println("a = " + j + ", b = " + k + ",  f(a,b) = " + fx(j,k) + ", count = " + count );
                        count++;
                        if (count == 100)
                            return;
                    }                        
                }
            }
        }
    }
    public static void main(String[] args)
    {
        My m = new My();
        m.f();
    }
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册