C练习(四)

来源:互联网 发布:苹果4s4g网络 编辑:程序博客网 时间:2024/04/30 06:45

1.标题: 马虎的算式

    小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。

    有一次,老师出的题目是:36x 495 = ?

    他却给抄成了:396 x45 = ?

    但结果却很戏剧性,他的答案竟然是对的!!

    因为 36 * 495 =396 * 45 = 17820

    类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54

    假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)

    能满足形如: ab *cde = adb * ce 这样的算式一共有多少种呢

请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。

满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。


#include <stdio.h>int main(){    int a,b,c,d,e;    int m,n;    int x,y;    int count = 0;    for(a = 1; a < 10; a++)    {        for(b = 1; b < 10; b++){    for(c = 1; c < 10; c++)    {        for(d = 1; d < 10; d++){    for(e = 1; e < 10; e++)    {        if(a!=b && a!=c && a!= d && a!= e   && b!=c && b!=d && b!= e   && c!=d && c!=e    && d!=e){    m = a * 10 + b;    n = c * 100 + d * 10 + e;    x = a * 100 + d * 10 + b;    y = c * 10 + e;    if(m * n == x * y)    {        count++;    }}       }}    }}    }    printf("%d\n",count);    return 0;}

感想:

1.      大循环遍历寻求答案,有效率低资源浪费的缺点

2.      之间忘记初始化count,答案不正确。由此可见,不能忘记初始化局部变量。

 

 

2.题目标题: 第39级台阶

 

    小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!

 

    站在台阶前,他突然又想着一个问题:

 

    如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?

 

 

    请你利用计算机的优势,帮助小明寻找答案。

 

要求提交的是一个整数。

注意:不要提交解答过程,或其它的辅助说明文字。

程序分析:

这个程序不需要纠结在左脚和右脚的问题上,从中抽象出限制条件:一共走的步数是偶数;

我们可以通过递归来实现,对每次递归的结果进行判断,如果走过的台阶数为39则,结束递归,判断走的步数是否为偶数,为偶数则为上法计数器加一,否则为无效上法;

#include<stdio.h>  int count=0;  void fun(int stair,int step)  {   //stari用于表示剩余的楼梯的层数,当等于0时停止递归      //step是走过的步数,用来判断是否是偶数,是否符合要求       if(stair<0)return;        if(stair==0)   //39节楼梯全部走完        {          if(step%2 == 0)count++;                  return;       }        fun(stair-1,step+1);   //这一步走了一个台阶        fun(stair-2,step+1);   //这一步走了两个台阶   }  int main()  {      fun(39,0);      printf("%d\n",conut);      return 0;   }  }


输出结果为:51167078



0 0
原创粉丝点击