蓝桥---网友年龄

某君新认识一网友。
当问及年龄时,他的网友说:
“我的年龄是个2位数,我比儿子大27岁,
如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”
请你计算:网友的年龄一共有多少种可能情况?
提示:30岁就是其中一种可能哦.
请填写表示可能情况的种数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

思路1:
由于求解的是父亲的年龄,并且父亲的年龄在两位数之内,所以我们可以考虑使用枚举的方法进行求解。
且根据父亲年龄比儿子年龄大27岁以及父亲年龄的两位数字进行交换就是儿子的年龄可以得到一个求解公式:Fage - Sage = 27,rev(Fage) = Sage.
网友的求解方式:

#include<iostream>

using namespace std;

int main()
{
    int count = 0;
    for(int m = 0;m<100;m++)
    {
        int temp=(m%10)*10+m/10;
        if(temp == m - 27){
            //cout << m <<endl; //输出父亲的年龄并打印换行
            count++;    
        } 
           
    }
    cout<<count;
    return 0;
}

我的求解方式是检索儿子的年龄范围,由于父亲的最大年龄为两位数,即99,则儿子的年龄范围不可能超过99 - 27 = 72岁,儿子最小年龄为0岁,这样就进一步的缩小了枚举的范围,但在线性时间内好像没有太大的影响。并且我使用了一个求解数字逆序的函数这更是程序本身又增加了一个函数调用的时间,所以程序效率不高。

#include <iostream>
using namespace std;

int reverse(int n)//将数字逆序
{
    int rev = 0;
    while(n)
    {
        int m = n % 10;
        rev = rev * 10 + n % 10;
        n /= 10;
    }
    return rev;
}
int main()
{
    int a,b,count = 0;
    for(b = 0; b <= 72; b++){
        a = b + 27;
        if(reverse(a) == b){
            //cout << a << endl;//输出父亲的年龄
            count++;
        }
    }
    cout << count << endl;
    return 0;
} 

最后我想网友的代码与我自己缩写的继续了结合,比之前的函数调用要好了一些,但是也只是缩减了枚举的范围,还是在先行阶求解。

#include <iostream>
using namespace std;

//int reverse(int n)
//{
//  int rev = 0;
//  while(n)
//  {
//      int m = n % 10;
//      rev = rev * 10 + n % 10;
//      n /= 10;
//  }
//  return rev;
//}
int main()
{
    int a,b,count = 0;
    for(b = 0; b <= 72; b++){
        a = b + 27;
        int temp = (a % 10) * 10 + a / 10;
        if(temp == b){
            //cout << a << endl;输出父亲年龄
            count++;
        }
    }
    cout << count << endl;
    return 0;
} 

You can leave me a message if you find out anything incorrect in my diary, I'll correct it, thanks.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容