几道C++编程题

来源:百度知道 编辑:UC知道 时间:2024/06/01 13:25:22
1.两队比赛,各出三人。
甲为ABC,乙为XYZ,已经抽签决定比赛名单。
有人向队员打听比赛名单。
A不与X比,C不与XZ比。
请编程找出3对赛手的名单。

2.用迭代法求x=根号a。
公式:Xn+1=1/2*(Xn+a/Xn)。
要求先后求出的X的差的绝对值小于10e-5。
请问。X1的值怎么求?

3.一个数如果恰好等于它的因子之和,这个数就称为完数。
编程序找出1000内的所有完数。
并按“6,its factors are 1,2,3"格式输出其因子。

4.4种冒泡排序的算法。
能不能帮我把第一问也解答一下?
还有,我们还么有学指针。所以第三题有没有别的算法。

2、所谓迭代,就是初值可以在一定范围内任取。比如本题取初值大于零即可。程序很简单,具体C++程序如下:
#include<iostream>
using namespace std;
#include<math.h>
int main()
{
float a;
cout<<"请输入正数a:"<<endl;
cin>>a;
float x0=5000,x1; //这里初值取为5000,若取0.001结果也不变,只要大于零。
do
{
x1=x0;
x0=0.5*(x1+a/x1);
}
while(fabs(x1-x0)>=1e-5);
printf("The root of the equation is:%f\n",x0);
return 0;
}

3、具体程序如下:
#include <iostream>
using namespace std;
const int N=1000;
void f(int n)
{
int i,k,a[N],j=0,s=0;
for(i=2;i<n;i++)
if(n%i==0)
{
j++;a[j]=i;
}
a[0]=1;
for(k=0;k<=j;k++)
s+=a[k];
if(s==n)
{
cout<<n<<",its factors are ";
for(k=0;k<j;k++)
cout<<a[k]<<",";
cout<<a[j]<<endl;
}