两个C++题

lptang_04 2008-03-19 05:05:32
#include<iostream>

using namespace std;

void main()
{
const int bound = 50;
int i = 0, j = 0, k = 0;
int lamp[bound];

for(i = 0; i < bound; i++)
lamp[i] = 0;
for(i = 0; i < bound; i++)
for(j = 0; j < bound; j++)
if(j % i == 0)lamp[j] = !lamp[j];
while(k < bound)
{
if(lamp[k] == 1)cout << lamp[j] << endl;
k++;
}
}


第二个

#include<iostream>
using namespace std;
void main()
{
const int num = 60;
int i, j, k, m;
for(m=1;m<num;m++)
for(i=1;i<m;i++)
for(j=i;j<m;j++)
for(k=j;k<m;k++)
{
if((m==i*j*m)&&(i+j+k==13))
cout << i << '\t'<< j << '\t'<< k << '\t'<< m << endl;
}
}

我想问它们各自输出什么呀
...全文
295 21 打赏 收藏 转发到动态 举报
写回复
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
lptang_04 2008-03-20
  • 打赏
  • 举报
回复
怎么没有人回答呀????
街头杀手 2008-03-20
  • 打赏
  • 举报
回复
自己运行下,想一个一个看结果可以自己一个一个的调试下啊
lptang_04 2008-03-20
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 hai040 的回复:]
第二题
if((m==i*j*m)&&(i+j+k==13)) ,应该是m==i*j*k
[/Quote]

我找到原来的试题,第一题中应该是
for(i = 1; i < bound; i++)
for(j = 0; j < bound; j++)
if(j%i==0)lamp[j]=!lamp[j];


hai040 2008-03-20
  • 打赏
  • 举报
回复
第二题
if((m==i*j*m)&&(i+j+k==13)) ,应该是m==i*j*k
Vitin 2008-03-20
  • 打赏
  • 举报
回复
哦,其实15楼都已经说了,呵呵。
Vitin 2008-03-20
  • 打赏
  • 举报
回复
第二题估计有一个错误:
if((m==i*j*m)&&(i+j+k==13))
疑为
if((m==i*j*k)&&(i+j+k==13))

代码的含义4楼已经说了。
Vitin 2008-03-20
  • 打赏
  • 举报
回复
第一题应该是输出50以内的完全平方数(按代码,是因子的个数为奇数)。
但是代码有几处错误:
1、
for(i = 0; i < bound; i++) // 这里的i=0应该是i=1,因为0不能做除数
for(j = 0; j < bound; j++)
if(j % i == 0)lamp[j] = !lamp[j];
2、
if(lamp[k] == 1)cout << lamp[j] << endl; // 疑为 cout << k << endl; ,此时lamp[j]是越界的,无意义
luoshw27 2008-03-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 oakfire 的回复:]
没有上机实践,以下是目测结论:
第一个,按程序算法思路似乎想输出50以内的质数,但以上面的代码什么都不会输出;
第二个,输出满足以下四条的i,j,k,m: 1 1 <i <=j <=k <m <60 ;2 i*j*k = m; 3 i+j+k = 13; 4 i,j,k,m为整数


这两题是哪个操蛋的写的?
[/Quote]

没有编译器实践,本人认为:
第一条 类似一道有关开关的智力题。0<=j<bound 整除0<=i<bound 时对lamp[j]求反,具体说:i=1时,所有lamp[j]求反;i=2时,所有为2的倍数的j的lamp[j]求反;i=3时,所有为3的倍数的j的lamp[j]求反....直到i=bound。
归纳得到:只有j为N的平方数时,其因子为奇数个,如9的因子为1,3,9;所以j为1,4,9,16,25,36,49时打印lamp[j]。

第二条不知道题目m==i*j*m 是不是m==i*j*k
lptang_04 2008-03-19
  • 打赏
  • 举报
回复
第一个有些问题,我也说不清楚,VC2005下,运行出错

第二个,能运行,但结果大大出我预料

麻烦各个运行分析一下,我的分析能力有限
langwan1314 2008-03-19
  • 打赏
  • 举报
回复
for(i = 0; i < bound; i++)
for(j = 0; j < bound; j++)
if(j % i == 0)lamp[j] = !lamp[j];




中间不是i为0,但作了除数
KenYuan2016 2008-03-19
  • 打赏
  • 举报
回复

while(k<bound){
//if(lamp[k] == 1)cout << lamp[j] << " " <<j<<endl;
cout<<k << " " << lamp[j] <<" " << &lamp[j] << " " <<&k << " " <<j<<endl;
k++;
}


lamp[10] 越界了,它把自己的空间扩展到k哪里了。你会看到相同的地址
1 1 0012FF70 0012FF70 10
2 2 0012FF70 0012FF70 10
3 3 0012FF70 0012FF70 10
4 4 0012FF70 0012FF70 10
5 5 0012FF70 0012FF70 10
6 6 0012FF70 0012FF70 10
7 7 0012FF70 0012FF70 10
8 8 0012FF70 0012FF70 10
9 9 0012FF70 0012FF70 10
Press any key to continue
越界后vc的 处理就有问题了,所以我认为结果不是我们想的正常,不正确的处理只有你知道vc是怎么做的,才知道结果。g++下是越界错误的,我编译过了。
我们只按照c++标准写程序就可以了,这样的写法我不赞同。
KenYuan2016 2008-03-19
  • 打赏
  • 举报
回复
vc 下是那样,g++ 越界


#include <iostream>

using namespace std;
int main(){
const int bound = 10;
int i = 1, j = 1, k = 1, n=2;
int lamp[bound];

for(i = 1; i < bound; i++){
lamp[i] = 0;
}

for(i = 1; i < bound; i++){
for(j = 1; j < bound; j++)
if(j % i == 0){
cout<<lamp[j]<<" "<<j<<"|";
lamp[j] = !lamp[j];
} cout<<lamp[j]<<" "<<j<<endl;
}

cout<<" ---------------------- "<<endl;
while(k<bound){
//if(lamp[k] == 1)cout << lamp[j] << " " <<j<<endl;
cout<<k << " " << lamp[j] << " " <<j<<endl; //lamp[j]=n=2
k++;
}

return 0;
}


ttkk_2007 2008-03-19
  • 打赏
  • 举报
回复

for(i = 0; i < bound; i++)
for(j = 0; j < bound; j++)
if(j % i == 0)lamp[j] = !lamp[j]; //这个编译没出错?这是哪个学校的考研题?

KenYuan2016 2008-03-19
  • 打赏
  • 举报
回复

#include <iostream>

using namespace std;
int main(){
const int bound = 10;
int i = 1, j = 1, k = 1;
int lamp[bound];

for(i = 1; i < bound; i++)
lamp[i] = 0;

for(i = 1; i < bound; i++)
for(j = 1; j < bound; j++)
if(j % i == 0){
cout<<lamp[j]<<" "<<j<<"|";
lamp[j] = !lamp[j];
} cout<<lamp[j]<<" "<<j<<endl;


while(k<bound){
if(lamp[k] == 1)cout << lamp[j] << " " <<j<<endl;
k++;
}

return 0;
}

修改了1下,只想看看结果,结果出乎意料 睁大眼睛,不知道 j不变的时候为啥输出的结果变了。。。

0 1|1 1
0 2|1 2
0 3|1 3
0 4|1 4
0 5|1 5
0 6|1 6
0 7|1 7
0 8|1 8
0 9|1 9
1 2|0 2
1 4|0 4
1 6|0 6
1 8|0 8
1 3|0 3
0 6|1 6
1 9|0 9
0 4|1 4
0 8|1 8
1 5|0 5
1 6|0 6
1 7|0 7
1 8|0 8
0 9|1 9

1 10
4 10
9 10
Press any key to continue

KenYuan2016 2008-03-19
  • 打赏
  • 举报
回复
昏死 欠套了这么多 for...
第1题 先做断行

#include <iostream>

using namespace std;
void main()
{
const int bound = 50;
int i = 0, j = 0, k = 0;
int lamp[bound];

for(i = 0; i < bound; i++) //初始化
lamp[i] = 0;

for(i = 0; i < bound; i++)
for(j = 0; j < bound; j++)
if(j % i == 0)lamp[j] = !lamp[j]; //不标明 if只管到紧跟的第1个;号 i=0 不能放在%后

while(k < bound) //
{
if(lamp[k] == 1)cout << lamp[j] << endl;
k++;
}
}
wwwwfly 2008-03-19
  • 打赏
  • 举报
回复
不会是考研的改错题吧 ^_^
lptang_04 2008-03-19
  • 打赏
  • 举报
回复
两个我都在VC2005上运行了,但结果与我想的不一样,这是考研的题

oakfire 2008-03-19
  • 打赏
  • 举报
回复
没有上机实践,以下是目测结论:
第一个,按程序算法思路似乎想输出50以内的质数,但以上面的代码什么都不会输出;
第二个,输出满足以下四条的i,j,k,m: 1 1<i<=j<=k<m<60 ;2 i*j*k = m; 3 i+j+k = 13; 4 i,j,k,m为整数



这两题是哪个操蛋的写的?



paidfighting 2008-03-19
  • 打赏
  • 举报
回复
有上网发帖的功夫,结果早出来了
dubiousway 2008-03-19
  • 打赏
  • 举报
回复
!?

加载更多回复(1)

63,596

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下