| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1334 人关注过本帖
标题:请教2道编程题~~
只看楼主 加入收藏
youyuanjia
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-9-19
结帖率:84.62%
收藏
已结贴  问题点数:20 回复次数:14 
请教2道编程题~~
1、张三、李四、王五、刘六的年龄成一等差数列,他们四人年龄相加是26,相乘是880,求以他们的年龄为前4项的等差数列的前20项。请编程。
2、张三说李四在说谎,李四说王五在说谎,王五说张三和李四都在说谎,现在问:这三个人中到底谁说的是真话,谁说的是假话?请编程判断。
   
附:望给出详细分析说明,怎么解答这样的题目,算法是什么?谢谢了
   
搜索更多相关主题的帖子: 编程 三和 
2010-03-11 22:44
帅超
Rank: 2
等 级:论坛游民
帖 子:25
专家分:23
注 册:2009-9-12
收藏
得分:0 
设数列的首项为a,则前4项之和为"4*n+6*a",前4 项之积为"n*(n+a)*(n+a+a)*(n+a+a+a)"。同时"1<=a<=4","1<=n<=6"。可采用穷举法求出此数列。
#include<stdio.h>
void main()
{
    int n,a,i;
    printf("The series with equal difference are:\n");
    for(n=1;n<=6;n++)                 /*公差n取值为1~6*/
        for(a=1;a<=4;a++)             /*首项a取值为1~4*/
            if(4*n+6*a==26&&n*(n+a)*(n+a+a)*(n+a+a+a)==880)  /*判断结果*/
                for(i=0;i<20;i++)
                    printf("%d  ",n+i*a);            /*输出前20项*/
}


运行结果
    The series with equal difference are:
    2  5  8  11  14  17  20  23  26  29  32  35  38  41  44  47  50  53  56  59
2010-03-11 22:53
帅超
Rank: 2
等 级:论坛游民
帖 子:25
专家分:23
注 册:2009-9-12
收藏
得分:0 
#include<stdio.h>
int main()
{
int a,b,c;
for(a=0;a<=1;a++)
for(b=0;b<=1;b++)
for(c=0;c<=1;c++)
if((a&&!b||!a&&b)&&(b&&!c||!b&&c)&&(c&&a+b==0||!c&&a+b!=0))
{
printf("Zhangsan told a %s.\n",a?"truth":"lie");
printf("Lisi told a %s.\n",b?"truch":"lie");
printf("Wangwu told a %s.\n",c?"truch":"lie");
}
}
2010-03-11 22:57
帅超
Rank: 2
等 级:论坛游民
帖 子:25
专家分:23
注 册:2009-9-12
收藏
得分:0 
要停电了,明天给出详细解析。。。
2010-03-11 22:58
youyuanjia
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-9-19
收藏
得分:0 
回复 4楼 帅超
第1题到底首项设的是a还是n哦?我怎么感觉首项应该是a,公差是n,前4项的和为4*a+6*n,这样才对吧?
我还有一个问题要请教的就是,为什么通过这个表达式就可以知道a和n的取值范围了呢?
2010-03-11 23:23
youyuanjia
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-9-19
收藏
得分:0 
回复 4楼 帅超
第2题怎么理解哦,等待~~~
2010-03-11 23:24
飘在深圳
Rank: 1
等 级:新手上路
帖 子:27
专家分:5
注 册:2010-2-28
收藏
得分:0 
#include "stdio.h"
void main()
{
    int i,j,k;
    for(i=0;i<=1;i++)
           for(j=0;j<=1;j++)
            for(k=0;k<=1;k++)
            if((i&&!j||j&&!i)&&(k&&!j||!k&&j)&&(k&&(!i&&!j)||!k&&(i||j)))
             printf("%d,%d,%d\n",i,j,k);
}
2010-03-12 12:00
树上月
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:114
专家分:154
注 册:2010-1-6
收藏
得分:0 
回复 5楼 youyuanjia
因为四项相加和为26;设首项为a,公差为n。
假设n=0;那么a的最大值就为6;因为6*4=24!=26;故n!=0;所以a<6;
又假设a=1;1+(n+1)+(2*n+1)+(3*n+1)<=26.n<4.

每一个不曾起舞的日子,都是对未来的一种辜负......
2010-03-12 12:51
树上月
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:114
专家分:154
注 册:2010-1-6
收藏
得分:10 
设首项为a,公差为n:分析得a,n的取值范围(a<6,n<4)
#include<stdio.h>
int main()
{
   int i,a,n,b[20];
   for(a=1;a<6;a++)
       for(n=1;n<4;n++)
           if((a+(a+n)+(a+2*n)+(a+3*n)==26)&&(a*(a+n)*(a+2*n)*(a+3*n)==880))
   for(i=0;i<20;i++)
       b[i]=a+i*n;
   for(i=0;i<20;i++)
       printf("%d\t",b[i]);
   return 0;
}
运行结果为:2  5  8  11  14  17  20  23  26  29  32  35  38  41  44  47  50  53  56  59


每一个不曾起舞的日子,都是对未来的一种辜负......
2010-03-12 12:54
帅超
Rank: 2
等 级:论坛游民
帖 子:25
专家分:23
注 册:2009-9-12
收藏
得分:0 
回复 5楼 youyuanjia
首项是a,公差是n,取值范围第八楼解释的是正确的。
2010-03-12 15:17
快速回复:请教2道编程题~~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015943 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved