A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 楠瓜果 中级黑马   /  2014-7-12 23:25  /  2897 人查看  /  22 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有5个人坐在一起,问第5个人多少岁?他说比第4个人大两岁,问第4个人岁数,他说比第3个人大两岁,问第3个人岁数,他又说比第2个人大两岁,问第2个人岁数,他说比第1个人大两岁,最后问第1个人他说10岁。编写程序,当输入第几个人时求出其对应的年龄。

22 个回复

倒序浏览
  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. }
复制代码

函数递归调用。挺简单的题
回复 使用道具 举报
#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
}
回复 使用道具 举报
/*
有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;
    }
   
}
回复 使用道具 举报
递归就解决了,主要是自己要把数学的逻辑模型想出来
回复 使用道具 举报
经典的约瑟夫环问题。
回复 使用道具 举报
直接挨个+2。。不用递归吧:lol
回复 使用道具 举报
这是考的递归
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. }
复制代码
回复 使用道具 举报 1 0
看看      
回复 使用道具 举报
★Joean_Zhou 发表于 2014-7-13 10:28
/*
有5个人坐在一起,问第5个人多少岁?他说比第4个人大两岁,问第4个人岁数,他说比第3个人大两岁,问第3 ...

你这个方法有点笨方法吧,这是先用口算计算出这个人多少岁,如果人多了,规律不一样呢,就没法计算了
回复 使用道具 举报


  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
我刚看了下递归的视频,明白了,想的方法也和这个差不多,谢谢你啊

没事呢  相互学习哈   :)
回复 使用道具 举报
小乖乖灬浩歌 来自手机 中级黑马 2014-7-14 17:58:22
14#
楼主  没说用设么语言写
回复 使用道具 举报
很多方法 都可以,无疑递归是最简单的
回复 使用道具 举报

美女好厉害的样子~~~是正式学员吗
回复 使用道具 举报
这个夏天的芬芳 发表于 2014-7-17 23:05
美女好厉害的样子~~~是正式学员吗

不是呢,还是菜鸟一枚~~
回复 使用道具 举报
yingzhuo1314 发表于 2014-7-19 11:28
不是呢,还是菜鸟一枚~~

纳尼~~那你现在在哪里学习啊
回复 使用道具 举报
{:2_32:}{:2_32:}{:2_32:}{:2_32:}{:2_32:}{:2_32:}
回复 使用道具 举报
这个夏天的芬芳 发表于 2014-7-20 20:57
纳尼~~那你现在在哪里学习啊

边工作边自学中~~
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马