/*
*程序的版权和版本声明部分:
*Copyright(c)2013,烟台大学计算机学院学生
*All rights reserved.
*文件名称:
*作者:田成琳
*完成日期:2013年 10月25 日
*版本号:v1.0
*对任务及求解方法的描述部分:
*输入描述: 张三,李四,王五,刘六的年龄成一等差数列,他们四人的年龄相加是26,相乘是880,求以他们年龄为前4项的等差数列的前20项
*问题描述:穷举法
*程序输出:他们年龄为前4项的等差数列的前20项
*问题分析:
*算法设计:
*/
我的程序:
#include<iostream>
using namespace std;
int main()
{
int a,b,c,d,n,sum=0;
cout<<"以他们的年龄为前4项的等差数列前20项为:"<<endl;
for(a=1;a<=26;a++)
for(b=1;b<=26;b++)
for(c=1;c<=26;c++)
for(d=1;d<=26;d++)
if(a+b+c+d==26&&a*b*c*d==880) //一个大if先判断条件是否符合
{
if(a<=b&&b<=c&&c<=d) //考虑到等差只有两种情况,所以先if一下
{
cout<<a<<" "<<b<<" "<<c<<" "<<d<<" "; //先把他们年龄输出,再考虑后面
for(n=1;n<=16;n++) //题目要求输出前20项,故n<=16
{
sum=d+((d-c)*n); //这个循环体这一部分想了好久,终于成功
cout<<sum<<" ";
}
cout<<endl;
}
else if(d<=c&&c<=b&&b<=a)
{
cout<<a<<" "<<b<<" "<<c<<" "<<d<<" "; //这一块没技术含量,和上面一样
for(n=1;n<=16;n++)
{
sum=d+((d-c)*n);
cout<<sum<<" ";
}
cout<<endl;
}
}
return 0;
}
运行结果:
心得体会:开始时脑子有大体思路,落实起来时循环体那部分脑子混乱了,不过这还难不倒我,仔细研究就出来了。