zoukankan      html  css  js  c++  java
  • 又一道简单的题

    题目描述

    输入一个四个数字组成的整数 n,你的任务是数一数有多少种方法,恰好修改一个数字,把它 变成一个完全平方数(不能把首位修改成 0)。比如 n=7844,有两种方法:3844=622 和 7744=882

    输入

    输入第一行为整数 T (1<=T<=1000),即测试数据的组数,以后每行包含一个整数 n (1000<=n<=9999)。 

    输出

    对于每组数据,输出恰好修改一个数字,把 n变成完全平方数的方案数

    样例输入

    2
    7844
    9121

    样例输出

    Case 1: 2
    Case 2: 0

    分析

    暴力枚举,但是有些小技巧,因为一定是四位数,所以容易找出所有的完全平方数

    31*31=916

    32*32=1024

    …………

    99*99=9801

    100*100=10000

    将这些数用数组标记遍历的时候直接判断

    参考代码

    #include <iostream>
    #include <math.h>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    using namespace std;
    
    int main()
    {
        int T;
        int n;
        int sum=0;
        int num=1;
        char s[5];//输入的四位数
        bool v[10001];//标记数组
        memset(v,false,sizeof(v));
        for(int i=32;i<100;i++){
            v[i*i]=true;//把四位数的完全平方数标记下来
        }
        scanf("%d",&T);
    
        while(T--){
            sum=0;
            scanf("%s",s);
            n=atoi(s);//字符串转整型
            for(int k=1000,i=0;i<4;k/=10,i++){//遍历改变字符串的第i位
                for(int j=0;j<=9;j++){
            /*i==0&&j==0是首位变成0的情况
              s[i]-'0'==j是n不变的情况
            */
                    if((i==0&&j==0)||(s[i]-'0'==j)){
                        continue;
                    }
                    else if(v[n-(s[i]-'0'-j)*k]){
                        sum++;
                    }
                }
            }
            printf("Case %d: %d
    ",num++,sum);
        }
        return 0;
    }
  • 相关阅读:
    webdav srs相关
    How To Configure WebDAV Access with Apache on Ubuntu 14.04
    ubuntu 编译lighttpd
    srs编译及推流测试
    Compile pciutils (lspci, setpci) in Windows x86,在 Windows x86 平台下编译 pciutils (lspci, setpci)
    mingw MSYS2 区别
    Qt之美(三):隐式共享
    Qt之美(二):元对象
    Qt之美(一):d指针/p指针详解
    C++的栈空间和堆空间
  • 原文地址:https://www.cnblogs.com/LuRenJiang/p/7464668.html
Copyright © 2011-2022 走看看