首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

100分,请进来来做做这几道面试题,该怎么解决

2012-02-05 
100分,请进来来做做这几道面试题1、完全数是指该数的所有因子之和等于它自身的数。例如6是完全数(1+2+3),28

100分,请进来来做做这几道面试题
1、完全数是指该数的所有因子之和等于它自身的数。例如6是完全数(1+2+3),28也是完全数(1+2+4+7+14)。28之后的下一个数相当大,手工计算比较难求。试给出一个算法,判断一个整数是否为完全数。
2、可将仓库中存储的商品看成实体,试仿照下面示例的描述方法,描述该实体;
              示范:在银行账户中存款
              输入:存款金额m和当前余额b。
              输出:新余额b '。
              步骤:令b '=b+m并终止。
3、给定字母表∑={1,1}。串s由1开头,中间有零个或多个0或1,最后由1结束。试用BNF描述串s的语法。

谢谢。

[解决办法]
题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
   找出1000以内的所有完数。
1. 程序分析:请参照程序 <--上页程序14.
2.程序源代码:
#include "stdio.h "
#include "conio.h "
main()
{
static int k[10];
int i,j,n,s;
for(j=2;j <1000;j++)
{
n=-1;
s=j;
for(i=1;i <j;i++)
{
if((j%i)==0)
{
n++;
s=s-i;
k[n]=i;
}
}
if(s==0)
{
printf( "%d is a wanshu ",j);
for(i=0;i <n;i++)
printf( "%d, ",k[i]);
printf( "%d\n ",k[n]);
}
}
getch();
}

[解决办法]
<串S> := 1[ <中间串> ]1
<中间串> := 0 | 1 | 0 <中间串> | 1 <中间串>
[解决办法]
第二道题:
bool isfulldigit(int digit)
{
if (digit < 1)
{
cout < < "输入的数字不能小于1 " < < endl;
return false;
}
int sum = 1;
for(int i = 2; i <= digit / 2; i++)
{
if (digit % i == 0)
{
sum += i;
}
}
if (sum == digit)
{
return true;
}
return false;
}
[解决办法]
完数是有一个规则的,不需要这样来穷举
n-1 n
2 (2 - 1)
[解决办法]
第三题:
S= 1A
A= 1A | 0A | B
B= 1
或者:
S=1A1
A=1A | 0A | e //e 表示为空字符
[解决办法]
第一题
bool Mycheckit(int input)
{
int sum=0,div;
if(input <=0)
{
printf( "请输入正整数! ");
return false;
}
else
{
for(div=1;div <=input/2;div++)
{
if(input%div==0)
sum+=div;
else
;
if(sum> input)
{
return false;
}
}
}
if(sum==input)
return true;
else
return false;
}
[解决办法]
1
bool foo(int n)
{
int temp = 0;
for (int i = 0; i <n; i++)
{
if (n % i == 0)
temp += i;
}
if (temp == n)
return true;
return false;
}
[解决办法]
第二道:

#include <stdio.h>

class CTemp
{
private:
float fleft;
float fin;
float temp;

public:
CTemp();
~CTemp();
void peek();
void in();
void out();
};

CTemp::CTemp()
{
fleft = 0;
fin = 0;
temp = 0;
}

CTemp::~CTemp()


{
}

void CTemp::in()
{
printf( "请输入存入数量: ");
scanf( "%f ", &fin);
fleft = fleft + fin;
}

void CTemp::peek()
{
printf( "剩余:%g 上次存取:%g\n ", fleft, fin);
}

void CTemp::out()
{
printf( "请输入取出数量: ");
scanf( "%f ", &temp);
if (temp > fleft)
{
printf( "剩余不足\n ");
return;
}
fin = -temp;
fleft = fleft + fin;
}

void main()
{
CTemp a;
a.in();
a.peek();
a.out();
a.peek();
}

顶下



[解决办法]
//第一题源码
#include <iostream>

using std::cout;
using std::cin;
using std::endl;

bool CheckNum(int n)
{
int sum = 0;
for (int x = 1; x != n; ++x)
{
if (n % x == 0)
{
sum += x;
}
}
return sum == n;
}


int _tmain(int argc, _TCHAR* argv[])
{
int n;
cout < < "\t求指定范围内的完全数。 " < <endl;
cout < < "请输入指定范围(整数) " < <endl;
cin> > n;
cout < < "\t统计结果 " < <endl;
cout < < "1到 " < <n < < "以内的完全数统计如下: " < <endl;
for (int x = 1; x != n; ++x)
{
if (CheckNum(x))
cout < <x < <endl;
}
system( "PAUSE ");
return 0;
}

[解决办法]
我不是已经给出公式了吗,这个是一个标准的求完全数的公式,经过验证的。
n-1 n
2 (2 - 1)

其中n> 0,当取1时为1,取2时为6,取3时为28
你可以依次把n递增,取结果小于1000的数就可以了

(上面公式表示为[2的(n-1)次方乘以(2的n次方-1)])
[解决办法]
我不是已经给出公式了吗,这个是一个标准的求完全数的公式,经过验证的。
n-1 n
2 (2 - 1)

其中n> 0,当取1时为1,取2时为6,取3时为28
你可以依次把n递增,取结果小于1000的数就可以了

(上面公式表示为[2的(n-1)次方乘以(2的n次方-1)])
---------------------------
错了,兄弟,AWolfBoy(龍行江湖)!再仔细去看看定理:这可是著名的欧几里德定理,怎么能乱改呢
这里必须满足2^n -1是质数的情况下,才满足你说的那个公式为完全数
比如说 n=2,3都满足,但是n=4就不满足了,不信你自己带把
[解决办法]
第一道题的完整程序如下:
#include <stdio.h>

int IsWanquan(int wq)
{
int a[20];
int i,j=0;
int issum=0;
if(wq == 1)
{
printf( "1是完全数,因为:\n 1 = %d\n ",wq);
return 1;
}
for(i = 2; i <=wq;i++)
{
if((wq % i)!=0) continue;
else
{
a[j] = wq/i;
issum += a[j];
j++;
}
}
if(issum==wq)
{
printf( "%d是完全数!因为他的因子为:\n ",wq);
for(i = 0; i <j-1; i++)
printf( "%d + ",a[i]);

printf( "%d = %d ",a[j-1],wq);
printf( "\n ");
return 1;
}
else
{
printf( "%d不是完全数!因为他的因子为:\n ",wq);
for(i = 0; i <j-1; i++)
printf( "%d + ",a[i]);

printf( "%d != %d ",a[j-1],wq);
printf( "\n ");
return 0;
}
}

void main()
{
int w;
printf( "Please input a number: ");
scanf( "%d ",&w);
printf( "\n ");
IsWanquan(w);

}

------解决方案--------------------


#include <iostream>

using std::cout;
using std::cin;
using std::endl;

bool CheckNum(int n)
{
int sum = 0;
for (int x = 1; x != n; ++x)
{
if (n % x == 0)
{
sum += x;
}
}
return sum == n;
}


int _tmain(int argc, _TCHAR* argv[])
{
int n;
cout < < "\t求指定范围内的完全数。 " < <endl;
cout < < "请输入指定范围(整数) " < <endl;
cin> > n;
cout < < "\t统计结果 " < <endl;
cout < < "1到 " < <n < < "以内的完全数统计如下: " < <endl;
for (int x = 1; x != n; ++x)
{
if (CheckNum(x))
cout < <x < <endl;
}
system( "PAUSE ");
return 0;
}

热点排行
Bad Request.