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;
    }
  • 相关阅读:
    Java设计模式之单例模式
    Bootstrap-table使用footerFormatter做统计列
    Bootstrap进度条
    基于Bootstrap的表格插件bootstrap-table
    基于Bootstrap的对话框插件bootstrap-dialog
    基于Bootstrap的下拉框插件bootstrap-select
    JsonConfig处理日期时间
    Jquery表单验证插件validate
    Hibernate使用Criteria去重distinct+分页
    设置iframe高度自适应屏幕高度
  • 原文地址:https://www.cnblogs.com/LuRenJiang/p/7464668.html
Copyright © 2011-2022 走看看