黑马程序员技术交流社区

标题: 帮忙解决一下这道写,并写上注释 [打印本页]

作者: 楠瓜果    时间: 2014-7-12 23:25
标题: 帮忙解决一下这道写,并写上注释
有5个人坐在一起,问第5个人多少岁?他说比第4个人大两岁,问第4个人岁数,他说比第3个人大两岁,问第3个人岁数,他又说比第2个人大两岁,问第2个人岁数,他说比第1个人大两岁,最后问第1个人他说10岁。编写程序,当输入第几个人时求出其对应的年龄。


作者: rocki    时间: 2014-7-13 09:11
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     //声明求年龄函数
  5.     int age(int n);
  6.     //i变量存贮第几个人
  7.     int i;
  8.    
  9.     printf("请输入第几个人:\n");
  10.     //接收数据
  11.     scanf("%d",&i);
  12.     //调用函数并打印年龄
  13.     printf("年龄为%d\n",age(i));
  14.     return 0;
  15. }
  16. int age(int n)//求年龄函数
  17. {
  18.     int c;//用于接收返回值
  19.     if (n==1)
  20.     {
  21.         c=10;
  22.     }
  23.     else
  24.     {
  25.         c=age(n-1)+2;//递归调用
  26.     }
  27.     return c;
  28. }
复制代码

函数递归调用。挺简单的题
作者: 云霄之上    时间: 2014-7-13 09:57
#include <stdio>
int main()
{int i;
int age=10; //定义第一个人的年龄
for(i=1;i<6;i++)
{if(i!=1)  //把第一个人的年龄去除
age=age + 2;
printf("第%d个人的年龄是%d,i,age);
}
return 0
}
作者: ★Joean_Zhou    时间: 2014-7-13 10:28
/*
有5个人坐在一起,问第5个人多少岁?他说比第4个人大两岁,问第4个人岁数,他说比第3个人大两岁,问第3个人岁数,他又说比第2个人大两岁,问第2个人岁数,他说比第1个人大两岁,最后问第1个人他说10岁。编写程序,当输入第几个人时求出其对应的年龄。
*/
#include<stdio.h>

int main()
{
    //使之进入while循环
    int n = -1;
   
    //保证输入的数为1-5
    while( n < 1 || n > 5)
    {
        printf("请输入是第几个人:");
        scanf("%d",&n);
    }
   
    switch (n)
    {
        case 1:
            printf("10岁");
            break;
            
        case 2:
            printf("12岁");
            break;
            
        case 3:
            printf("14岁");
            break;
            
        case 4:
            printf("16岁");
            break;
            
        case 5:
            printf("18岁");
            break;
      
        default:
            break;
    }
   
}

作者: 邱蚓    时间: 2014-7-13 12:50
递归就解决了,主要是自己要把数学的逻辑模型想出来
作者: Medwyn    时间: 2014-7-13 13:23
经典的约瑟夫环问题。
作者: HPU--spring87    时间: 2014-7-13 17:04
直接挨个+2。。不用递归吧:lol
作者: 丶白菜你个小番    时间: 2014-7-13 20:58
这是考的递归
f(n)=f(n-1)+2;
..
f(1)=10;
根据规律你就可以写出以下代码
  1. int age(int n)
  2. {
  3.     if (n==1) {
  4.         return 10;
  5.     }
  6.     return age(n-1)+2;
  7. }
  8. int main(int argc, const char * argv[])
  9. {

  10.     int result=0;
  11.     printf("请输入询问第几个人的年龄:\n");
  12.     scanf("%d",&result);
  13.     int k=age(result);
  14.     printf("第%d个人的年龄是%d\n",result,k);
  15.     return 0;
  16. }
复制代码

作者: zxdanshui    时间: 2014-7-13 21:13
看看      
作者: 楠瓜果    时间: 2014-7-14 11:28
★Joean_Zhou 发表于 2014-7-13 10:28
/*
有5个人坐在一起,问第5个人多少岁?他说比第4个人大两岁,问第4个人岁数,他说比第3个人大两岁,问第3 ...

你这个方法有点笨方法吧,这是先用口算计算出这个人多少岁,如果人多了,规律不一样呢,就没法计算了
作者: yingzhuo1314    时间: 2014-7-14 14:09


  1. int age(int n)    //定义一个计算年龄的函数
  2. {
  3.         int age1;   //定义一个int类型变量
  4.         if(n==1)     //如果只有一个人,则返回这个人的年龄
  5.                 return 10;
  6.         else    //否则执行下面的语句
  7.         {
  8.                 age1=2+age(n-1);   //递归
  9.                 return age1;   //返回年龄
  10.         }

  11. }
  12. #include <stdio.h>
  13. void main()
  14. {
  15.         int i,n;   //定义两个int类型的变量,i存储人数,n存储年龄
  16.         printf("请输入人数:");  //输出
  17.         scanf("%d",&i);  //输入人数
  18.     n=age(i);     //调用age函数,并将结果赋值给n
  19.         printf("第%d个人的年龄为:%d岁\n",i,n);   //输出结果

  20. }
复制代码

作者: 楠瓜果    时间: 2014-7-14 14:13
yingzhuo1314 发表于 2014-7-14 14:09

我刚看了下递归的视频,明白了,想的方法也和这个差不多,谢谢你啊
作者: yingzhuo1314    时间: 2014-7-14 14:19
楠瓜果 发表于 2014-7-14 14:13
我刚看了下递归的视频,明白了,想的方法也和这个差不多,谢谢你啊

没事呢  相互学习哈   :)
作者: 小乖乖灬浩歌    时间: 2014-7-14 17:58
楼主  没说用设么语言写
作者: 小海    时间: 2014-7-14 22:05
很多方法 都可以,无疑递归是最简单的
作者: 这个夏天的芬芳    时间: 2014-7-17 23:05
yingzhuo1314 发表于 2014-7-14 14:09

美女好厉害的样子~~~是正式学员吗
作者: yingzhuo1314    时间: 2014-7-19 11:28
这个夏天的芬芳 发表于 2014-7-17 23:05
美女好厉害的样子~~~是正式学员吗

不是呢,还是菜鸟一枚~~
作者: 这个夏天的芬芳    时间: 2014-7-20 20:57
yingzhuo1314 发表于 2014-7-19 11:28
不是呢,还是菜鸟一枚~~

纳尼~~那你现在在哪里学习啊
作者: 这个夏天的芬芳    时间: 2014-7-20 21:07
{:2_32:}{:2_32:}{:2_32:}{:2_32:}{:2_32:}{:2_32:}
作者: yingzhuo1314    时间: 2014-7-20 22:17
这个夏天的芬芳 发表于 2014-7-20 20:57
纳尼~~那你现在在哪里学习啊

边工作边自学中~~
作者: 这个夏天的芬芳    时间: 2014-7-23 22:49
yingzhuo1314 发表于 2014-7-20 22:17
边工作边自学中~~

挺累的啊那
作者: 阳光地带    时间: 2014-7-23 23:11
本帖最后由 阳光地带 于 2014-7-23 23:13 编辑
  1. #include <stdio.h>
  2. int age(num)
  3. {
  4.     if(num == 1)
  5.         return 10;
  6.     return age(num-1)+2;
  7. }

  8. int main()
  9. {
  10.     print("%d", age(5));
  11.     return 0;
  12. }
复制代码

递归解法
作者: yingzhuo1314    时间: 2014-7-24 16:36
这个夏天的芬芳 发表于 2014-7-23 22:49
挺累的啊那

还好~~··




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2