为了感谢大家喔再发一贴 问题还一样希望高手们用最简单的程序解答,我真的是个大菜鸟,我们的课程就学了C++的一半而且我不是计算机专业的!希望大家再次支持

wwbsb 2009-06-17 07:39:08
2. 基本要求
(1) 要求用C++语言编程,在Visual C++环境下调试完成;

(2) 要求划分功能模块,各个功能分别使用函数来完成;

(3) 源代码程序要求必要的注释。

三、设计方法和基本原理
1. 课题功能描述
设计一个能够查找满足特定条件三位数的程序,要求实现的功能包括:找所有满足特定条件的三位数,然后输出(参见下图)。



2. 问题详细描述
特定条件:一个三位数的平方是一个六位数字,那么这个三位数和它的平方共有9个数字。要满足这9个数字恰好是1到9,没有重复。

要求编写多个函数分别实现上述功能,而后在main函数中进行调用。

3. 问题的解决方案:
根据问题的描述,可以按照程序要求的功能采用结构化的设计思想。

可以利用穷举法,三位数字的范围就是100到999,对每个数字进行判断。

四、主要技术问题的描述
本程序无特殊的需要说明的技术问题。

五、创新要求
在基本要求达到后,进行创新设计:

1. 使用多文件,即主函数和各个函数分别存放在不同的.cpp文件中,在头文件中进行函数原型声明;

2. 把满足条件进行扩展,例如求一个5位的16进制数,它的平方是个10位的16进制数,恰好包括0x1到0xF这15个数字。此问题的一般性描述为:对于一个3N+1进制数来说,有一个N位的3N+1进制数和它的平方(一个2N位的3N+1进制数),由1到3N组成。

请高手们用最简单易懂的程序编写 ,我真的很笨!
...全文
107 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiejhzwrgcky 2009-06-18
  • 打赏
  • 举报
回复
UP
短腿的兔子 2009-06-18
  • 打赏
  • 举报
回复
#include<iostream>
#include<stdio.h>
#include<set>
using namespace std;

int main()
{
int flag=0;
int i=100;

set<int> s;

for(i=100;i!=1000;++i)
{

s.insert((i/100));
s.insert((i%100/10));
s.insert((i%10));
s.insert(((i*i)/100000));
s.insert(((i*i)%100000/10000));
s.insert(((i*i)%10000/1000));
s.insert(((i*i)%1000/100));
s.insert(((i*i)%100/10));
s.insert(((i*i)%10));



if(s.count(1)&&s.count(2)&&s.count(3)&&s.count(4)&&s.count(5)&&s.count(6)&&s.count(7)&&s.count(8)&&s.count(9)&&!s.count(0))
flag=1;
else
{
flag=0;

}
if(flag==1)


{
cout<<i<<" "<<i*i<<endl;

}
s.erase(s.begin(),s.end());

}

system ("pause");
return 0;
}




简单点的程序
Wolf0403 2009-06-18
  • 打赏
  • 举报
回复
where's your thinking
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hikaliv 的回复:]
我是学通信工程的……
[/Quote]
我是学无线通信的
字云逸 2009-06-18
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 wwbsb 的回复:]
你的建议对我很有帮助 我的确也认真学了C语言 但你真的想象不到我们学的东西有多可怜 我们学的东西实在是太少了 这道题对于我们所学的东西来说能力相当于让一个初中生去考大学4级,但话说回来基础的东西我还是有的只不过我们真的学的太少了#include <iostream>
using namespace std;
int CheckNumber(int number);
int CheckNumber(int number)
{ int A[10]={0,1,2,3,4,5,6,7,8,9};
int d_number=number…
[/Quote]

看了一下,错误在于CheckNumber()里的for循环,i的作用域只在for里,把i声明在函数内而不声明在for里程序就能运行并得到正确的答案.当然我这是在C-Free里编译的,用的是MinGW (old)编译器.

引用24楼的注释:

#include <iostream>

using namespace std; //导入名称空间std,因为下面要使用到std中cout对象,也可以使用using std::cout; 或者在使用cout的地方加前缀,即std::cout;

int CheckNumber(int number); // 这是函数的原型,number为传入函数的参数,返回一个int数据

int CheckNumber(int number) // 以下是函数的具体定义
{
int A[10]={0,1,2,3,4,5,6,7,8,9}; // 定义个int的数组,共有10个元素,并将其值初始化为0-9
int d_number = number * number; // 计算参数的平方
int b;
int i;

do
{
b = number % 10; // 求10的余数,即得到number的个位数的值
number = number / 10; //去掉number的个位数:除以10并去掉可能的小数位(因为number是int类型,所以如果没有被10尽除,小数位将在自动类型转换时丢弃)
if ( A[b] != 0) // 检查个位数的值对应数组中的数字,如果不是0表示未出现过
A[b]=0; // 将其置0,表示已经出现了这个数字
else
return 0; // 如果是0,表示已经出现了这个数字,重复!肯定不满足条件,退出函数,返回0
} while (number != 0); // number=0退出循环,即number的每个位数都处理完毕了

do //原理和上面的循环一样,检查的数组是其平方值即d_number的各个位数
{
b = d_number % 10;
d_number = d_number / 10;
if (A[b] != 0)
A[b] = 0;
else
return 0;
} while (d_number != 0);

for (i = 1; i < 10; ++i) // 这个循环检查数组中所有的值是否0,如果都是0,则退出循环时i=10,即遍历了所有10个数
{
if (A[i] != 0)
break; // 如果不是0,则退出循环
}
if (i < 10) //如果遍历了10个数,即表示满足条件
return 0; // 不满足条件,退出函数,返回0
else
return 1; // 满足条件,退出函数,返回1
}

int main()
{
cout << "满足条件的数字为:" << endl;
for(int i=100; i < 1000; i++) // 循环,检查100-999的所有数字
{
if(CheckNumber(i)) //调用函数检查当前数字i
cout << i << endl; //满足条件则显示该数字
}
cout << "输出完毕!" << endl;
//getchar(); // 等待一个按键,相当于暂停一下,以便查看结果
return 0;
}
SimonYeung 2009-06-17
  • 打赏
  • 举报
回复
jf
光宇广贞 2009-06-17
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 v2sun 的回复:]
引用 9 楼 hikaliv 的回复:
我是学通信工程的……


通信工程的大几呀?
[/Quote]
刚毕业。
Sou2012 2009-06-17
  • 打赏
  • 举报
回复
帮顶!!!
wlwshang 2009-06-17
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 wwbsb 的回复:]
#include <iostream>
using namespace std;
int CheckNumber(int number);
int CheckNumber(int number)
{ int A[10]={0,1,2,3,4,5,6,7,8,9}; //这个算法太牛了!不服不行。
int d_number=number…
[/Quote]
lzh9955 2009-06-17
  • 打赏
  • 举报
回复
关注!
点墨 2009-06-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hikaliv 的回复:]
我是学通信工程的……
[/Quote]
通信工程的大几呀?
pathuang68 2009-06-17
  • 打赏
  • 举报
回复
顶!
坚持就是幸福 2009-06-17
  • 打赏
  • 举报
回复
直接要代码,貌似不行的吧。
gleen 2009-06-17
  • 打赏
  • 举报
回复
顶楼上的
wwbsb 2009-06-17
  • 打赏
  • 举报
回复
要是能给再多分的话 我全给了大家
wwbsb 2009-06-17
  • 打赏
  • 举报
回复
567和854
wwbsb 2009-06-17
  • 打赏
  • 举报
回复
哥哥啊 我要是学计算机专业的话 我天天抱着10本计算机专业的书看也没问题 但我学的不是计算机啊 我主攻的是电磁电机电力运输电子芯片方面的啊 我哪有那么多时间去整C++我又不修双学位
lixing01 2009-06-17
  • 打赏
  • 举报
回复
/*2. 基本要求 
(1) 要求用C++语言编程,在Visual C++环境下调试完成;
(2) 要求划分功能模块,各个功能分别使用函数来完成;
(3) 源代码程序要求必要的注释。

三、设计方法和基本原理
1. 课题功能描述
设计一个能够查找满足特定条件三位数的程序,要求实现的功能包括:找所有满足特定条件的三位数,然后输出(参见下图)。
2. 问题详细描述
特定条件:一个三位数的平方是一个六位数字,那么这个三位数和它的平方共有9个数字。要满足这9个数字恰好是1到9,没有重复。
要求编写多个函数分别实现上述功能,而后在main函数中进行调用。
3. 问题的解决方案:
根据问题的描述,可以按照程序要求的功能采用结构化的设计思想。
可以利用穷举法,三位数字的范围就是100到999,对每个数字进行判断。

四、主要技术问题的描述
本程序无特殊的需要说明的技术问题。

五、创新要求
在基本要求达到后,进行创新设计:
1. 使用多文件,即主函数和各个函数分别存放在不同的.cpp文件中,在头文件中进行函数原型声明;
2. 把满足条件进行扩展,例如求一个5位的16进制数,它的平方是个10位的16进制数,恰好包括0x1到0xF这15个数字。此问题的一般性描述为:对于一个3N+1进制数来说,有一个N位的3N+1进制数和它的平方(一个2N位的3N+1进制数),由1到3N组成。 */

#include "stdafx.h" // VC编译器预编译必须的头文件,我的编译器是VC2003
#include <iostream>

using namespace std; //导入名称空间std,因为下面要使用到std中cout对象,也可以使用using std::cout; 或者在使用cout的地方加前缀,即std::cout;

int CheckNumber(int number); // 这是函数的原型,number为传入函数的参数,返回一个int数据

int CheckNumber(int number) // 以下是函数的具体定义
{
int A[10]={0,1,2,3,4,5,6,7,8,9}; // 定义个int的数组,共有10个元素,并将其值初始化为0-9
int d_number = number * number; // 计算参数的平方
int b;

do
{
b = number % 10; // 求10的余数,即得到number的个位数的值
number = number / 10; //去掉number的个位数:除以10并去掉可能的小数位(因为number是int类型,所以如果没有被10尽除,小数位将在自动类型转换时丢弃)
if ( A[b] != 0) // 检查个位数的值对应数组中的数字,如果不是0表示未出现过
A[b]=0; // 将其置0,表示已经出现了这个数字
else
return(0); // 如果是0,表示已经出现了这个数字,重复!肯定不满足条件,退出函数,返回0
} while (number != 0); // number=0退出循环,即number的每个位数都处理完毕了

do //原理和上面的循环一样,检查的数组是其平方值即d_number的各个位数
{
b = d_number % 10;
d_number = d_number / 10;
if (A[b] != 0)
A[b] = 0;
else
return(0);
} while (d_number != 0);

for (int i = 1; i < 10; i++) // 这个循环检查数组中所有的值是否0,如果都是0,则退出循环时i=10,即遍历了所有10个数
{
if (A[i] != 0)
break; // 如果不是0,则退出循环
}
if (i < 10) // 如果遍历了10个数,即表示满足条件
return(0); // 不满足条件,退出函数,返回0
else
return(1); // 满足条件,退出函数,返回1
}

int main()
{
cout << "满足条件的数字为:" << endl;
for(int i=100; i < 1000; i++) // 循环,检查100-999的所有数字
{
if CheckNumber(i)) //调用函数检查当前数字i
cout << i << endl; //满足条件则显示该数字
}
cout << "输出完毕!" << endl;
getchar(); // 等待一个按键,相当于暂停一下,以便查看结果
return(0);
}


//以上的程序放在一个文件中的,多文件如下组织:



//==========================================================================================================文件1
//定义头文件名称为myheadfile.h,并将头文件放到工作目录下
int CheckNumber(int number); // 文件内容只有一个语句,即函数原型

//==========================================================================================================文件2
#include "stdafx.h" // VC编译器预编译必须的头文件,我的编译器是VC2003
#include "myheadfile.h" // 把自己的头文件包含进来,因为这个案例很简单,函数定义中没有使用const常量或其他函数,所以这儿不包含也没有关系

//定义函数的定义文件func.cpp,即确定函数的具体代码,完成该cpp文件后需要加入到项目中以便链接产生最终执行程序
int CheckNumber(int number) // 以下是函数的具体定义
{
int A[10]={0,1,2,3,4,5,6,7,8,9}; // 定义个int的数组,共有10个元素,并将其值初始化为0-9
int d_number = number * number; // 计算参数的平方
int b;

do
{
b = number % 10; // 求10的余数,即得到number的个位数的值
number = number / 10; //去掉number的个位数:除以10并去掉可能的小数位(因为number是int类型,所以如果没有被10尽除,小数位将在自动类型转换时丢弃)
if ( A[b] != 0) // 检查个位数的值对应数组中的数字,如果不是0表示未出现过
A[b]=0; // 将其置0,表示已经出现了这个数字
else
return(0); // 如果是0,表示已经出现了这个数字,重复!肯定不满足条件,退出函数,返回0
} while (number != 0); // number=0退出循环,即number的每个位数都处理完毕了

do //原理和上面的循环一样,检查的数组是其平方值即d_number的各个位数
{
b = d_number % 10;
d_number = d_number / 10;
if (A[b] != 0)
A[b] = 0;
else
return(0);
} while (d_number != 0);

for (int i = 1; i < 10; i++) // 这个循环检查数组中所有的值是否0,如果都是0,则退出循环时i=10,即遍历了所有10个数
{
if (A[i] != 0)
break; // 如果不是0,则退出循环
}
if (i < 10) // 如果遍历了10个数,即表示满足条件
return(0); // 不满足条件,退出函数,返回0
else
return(1); // 满足条件,退出函数,返回1
}

//==========================================================================================================文件3
//创建项目,main函数文件
#include "stdafx.h" // VC编译器预编译必须的头文件,我的编译器是VC2003
#include <iostream>
#include "myheadfile.h" // 把自己的头文件包含进来

using namespace std; //导入名称空间std,因为下面要使用到std中cout对象,也可以使用using std::cout; 或者在使用cout的地方加前缀,即std::cout;

int main()
{
cout << "满足条件的数字为:" << endl;
for(int i=100; i < 1000; i++) // 循环,检查100-999的所有数字
{
if CheckNumber(i)) //调用函数检查当前数字i
cout << i << endl; //满足条件则显示该数字
}
cout << "输出完毕!" << endl;
getchar(); // 等待一个按键,相当于暂停一下,以便查看结果
return(0);
}
lixing01 2009-06-17
  • 打赏
  • 举报
回复
我也是正在自学c++,c++ primer plus看了一半,这个题目都是很基本的内容,自己找本书仔细看一下,是可以完成的,用心用时间就可以
  • 打赏
  • 举报
回复
写了一个。但是没有搜索到合适的数,是我代码不对,还是你的题目本身就没有合适的解,你能给个符合条件的数让我看看吗?


int dec(int num,int *res)
{
int i=0;
while(num>0)
{
res[i++]=num%10;
num/=10;
}
return i;
}


int main ()
{
int i,j,num,i2,bit_map[10]={0};
int res[10]={0};
bool sign;
for(i=100;i<1000;++i)
{
sign=true;
i2=i*i;
i2=i2*1000+i;
num=dec(i2,res);
for(j=0;j<num;j++)
{
if(bit_map[res[j]]==0)
bit_map[res[j]]=1;
else
{
//cout<<i<<"*"<<i2<<endl;
sign=false;
break;
}
}
if(sign)
cout<<"num "<<i<<" and sum: "<<i2<<"are good"<<endl;
}
return 0;
}

加载更多回复(21)

65,211

社区成员

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

试试用AI创作助手写篇文章吧