zoukankan      html  css  js  c++  java
  • 学习笔记 简单的amob A%B Problem

    【基础题目】A%B Problem

    题目描述

    C--语言是一种C的简化版,它仅有的三种运算符为++,--和==(没有=,+,-,*,/,%,<,>等任何其他运算符),也没有循环及goto语句,除此之外与C相同。使用C--编写一个函数int
    mod(int a,int b),计算a除以b的余数。

    ——来自wweiyi暑假集训

    题意简述:只用++,--,==运算符和C++的其他功能来完成a%b的功能

    提示:允许调用其他函数

    这是一道神奇的题目,我想了大半天才想出来,甚至引来了老师的批评,接下来我说一说我的思路

    这道题我们需要只用++,--,==和C++的其他功能来实现模运算,这个看起开似乎无法实现,因为不能够使用循环,因此,这道题的阴影加深了。

    递归!循环的后裔!

    这里我们不能用循环,也就是我们需要使用类似循环的一个过程,递归来解决问题,递归是一种很常用的解决问题的方法,将一个大问题转换成一个子问题也许模运算就可以这样解决了。

    ++,--,==三运算符!三符成虎!

    我们要解决模运算首先要解决减法运算的问题,因为a%b,就是a一直减b,减到a小于b为止,因此,我们可以先解决减法运算。

    代码如下

    int jian(int a,int b)
    {
        if(b==0)
            return a;
        return jian(--a,--b);
    }
    

    这样就解决了减法运算;

    但是顺便说一句,加法和乘法运算实际上也很简单,让我来把代码贴出来!

    int add(int a,int b)
    {
        if(b==0)
            return a;
        return add(++a,--b);
    }
    int cheng(int a,int b)
    {
        if(b==0)
            return a;
        return add(a,cheng(a,--b));
    }
    

    我们可以轻松地解决减法,乘法和加法,但是模运算我们还是不知道,怎么办呢?

    判断!事情的转机?

    我们再次理清一下思路,我们需要a一直减b,一直减到a小于b为止,也就是mod(a,b)=mod(a-b,b),这就是神奇的递归式,就可以解决一部分问题,另一部分问题就是判断a小于b,我们可以a,b同时递减,看谁先到0,但由于这个问题的特殊性,当a=b时,需要特殊判断一下,因为一个数mod它的因数等于0,所以我们的思路就出来了,代码也就写出来了。

    代码如下

    #include <iostream>
    using namespace std;
    int pd(int a,int b)
    {
    	if(a==b)
    	return 0;
    	if(a==0)
    	return 1;
    	if(b==0)
    	return 0;
    	return pd(--a,--b);
    }
    int jian(int a,int b)
    {
    	if(b==0)
    	return a;
    	return jian(--a,--b);
    }
    int mod(int a,int b)
    {
    	if(pd(a,b)==1)
    	return a;
    	return mod(jian(a,b),b);
    }
    int main()
    {
    	int a,b;
    	cin>>a>>b;
    	cout<<mod(a,b)<<endl;
    	return 0;
    }
    //wweiyi费时3小时智造
    
    本博文为wweiyi原创,若想转载请联系作者,qq:2844938982
  • 相关阅读:
    php中 include 、include_once、require、require_once4个语言结构的含义和区别
    PHP yield 分析,以及协程的实现,超详细版(上)
    wordpress里的bloginfo()与get_bloginfo()
    CSS定位中“父相子绝”
    Apache 的 httpd.conf 详解
    apache的<directory>语句以及属性的含义
    你必须了解的Session的本质(PHP)
    Linux常用命令
    vmware中配置CentOS
    程序员可能会遇到的一些名词
  • 原文地址:https://www.cnblogs.com/wweiyi2004/p/11258284.html
Copyright © 2011-2022 走看看