要看什么系统了。你可以试下Console.ReadLine()或者尝试接收Args看看行不行。另外csdn的oj系统一直有问题,也不知道修复了没有现在。

解决方案 »

  1.   


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace 完全平方数
    {
        class Program
        {
            static void Main(string[] args)
            {
                do
                {
                    //依次输入1,1,1,2,3,10,3,3
                    Console.WriteLine("请把数据以英文半角逗号分隔");
                    string[] str = Console.ReadLine().ToString().Replace(",",",").Split(',');                int[] output = Array.ConvertAll<string, int>(str, delegate(string s) { return int.Parse(s); });                Concsoles(output);            } while (Console.ReadLine().ToString()!="y");
               
                Console.ReadLine();
            }
            private static void Concsoles(int[] inputNum)
            {
                int maxNum = 0;
                int minNum = 0;
                CompleteSquareNumber csn = new CompleteSquareNumber(2000000000);
                // 只计算能成对的数据
                for (int i = 0; i < inputNum.Length / 2; i++)
                {
                    minNum = inputNum[2 * i];
                    maxNum = inputNum[2 * i + 1];
                    if (maxNum < minNum)    // 数据错误,跳过本组
                    {
                        continue;
                    }
                    Console.WriteLine(csn.GetCSNCount(minNum, maxNum).ToString());
                }
            }
            // 获取指定范围内的完全平方数
            private int[] GetValue(int minValue, int maxValue)
            {
                List<int> numList = new List<int>();
                return numList.ToArray();
            }
        }
        sealed class CompleteSquareNumber
        {
            int[] allNums = null;   // 保存所有的完全数        public CompleteSquareNumber(int maxNum)
            {
                CreateAllCompleteSquareNumber(maxNum);
            }        // 生成所有指定范围内内的完全平方数
            private void CreateAllCompleteSquareNumber(int maxNum)
            {
                List<int> AllCSNList = new List<int>();
                AllCSNList.Clear();            int iCurr = 0;
                int n = 1;
                while (true)
                {
                    iCurr = n * n;
                    if (iCurr < maxNum)
                    {
                        AllCSNList.Add((int)iCurr);
                    }
                    else
                    {
                        break;
                    }
                    n++;
                }
                allNums = AllCSNList.ToArray();
            }        // 获取指定范围内的完全平方数
            public int GetCSNCount(int minValue, int maxValue)
            {
                int minIndex = 0;
                int maxIndex = 0;            int iLen = allNums.Length;
                for (int i = 0; i < iLen; i++)
                {
                    if (allNums[i] >= minValue)
                    {
                        minIndex = i;
                        break;
                    }
                }
                for (int i = minIndex; i < iLen; i++)
                {
                    if (allNums[i] > maxValue)
                    {
                        maxIndex = i;
                        break;
                    }
                }            return maxIndex - minIndex;
            }    }
    }依次输入1,1,1,2,3,10,3,3
    输出
    1
    1
    2
    0
    但是存在一个问题,不是按照这个1,1,1,2,3,10,3,3
    格式输入,你自己在修改一下吧。
      

  2.   

    /*
     * 第五届在线编程大赛月赛第一题:完全平方(CSDN)
     * 给定整数区间[A,B]问其中有多少个完全平方数。 输入格式: 多组数据,包含两个正整数A,B 1<=A<=B<=2000000000。 输出格式: 每组数据输出一行包含一个整数,表示闭区间[A,B]中包含的完全平方数的个数。 
     * 挑战规则: 
     * 输入样例 1 1 1 2 3 10 3 3 输出样例: 1 1 2 0
     */
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace 完全平方数
    {
        class Program
        {
            static void Main(string[] args)
            {
                while (true)
                {
                    Console.WriteLine("请输入:");
                    string s = Console.ReadLine();
                    if(s.Contains("y"))
                    {
                        return;
                    }
                    args = s.Split(new char[] { ' ' });
                    int[] inputNum = new int[args.Length];
                    for (int i = 0; i < args.Length; i++)
                    {
                        inputNum[i] = int.Parse(args[i]);
                    }                int maxNum = 0;
                    int minNum = 0;
                    CompleteSquareNumber csn = new CompleteSquareNumber(2000000000);                // 只计算能成对的数据
                    for (int i = 0; i < inputNum.Length / 2; i++)
                    {
                        minNum = inputNum[2 * i];
                        maxNum = inputNum[2 * i + 1];
                        if (maxNum < minNum)    // 数据错误,跳过本组
                        {
                            continue;
                        }
                        Console.WriteLine(csn.GetCSNCount(minNum, maxNum).ToString());
                    }
                }
            }
            
                    // 获取指定范围内的完全平方数
            private int[] GetValue(int minValue, int maxValue)
            {
                List<int> numList = new List<int>();
                return numList.ToArray();
            }
        }
        sealed class CompleteSquareNumber
        {
            int[] allNums = null;   // 保存所有的完全数        public CompleteSquareNumber(int maxNum)
            {
                CreateAllCompleteSquareNumber(maxNum);
            }        // 生成所有指定范围内内的完全平方数
            private void CreateAllCompleteSquareNumber(int maxNum)
            {
                List<int> AllCSNList = new List<int>();            int iCurr = 0;
                int n = 1;
                while (true)
                {
                    iCurr = n * n;
                    if (iCurr < maxNum)
                    {
                        AllCSNList.Add((int)iCurr);
                    }
                    else
                    {
                        break;
                    }
                    n++;
                }
                allNums = AllCSNList.ToArray();
            }        // 获取指定范围内的完全平方数
            public int GetCSNCount(int minValue, int maxValue)
            {
                int minIndex = 0;
                int maxIndex = 0;            int iLen = allNums.Length;
                for (int i = 0; i < iLen; i++)
                {
                    if (allNums[i] >= minValue)
                    {
                        minIndex = i;
                        break;
                    }
                }
                for (int i = minIndex; i < iLen; i++)
                {
                    if (allNums[i] > maxValue)
                    {
                        maxIndex = i;
                        break;
                    }
                }            return maxIndex - minIndex;
            }    }
    }
    =====================================
    这样也不行
      

  3.   

    你思考的思路一开始就有问题,这题其实很简单,直接计算二个数字平方根变成整数的差就行了,因为那个根肯定是连续的整数,如果最小值本身就是完全平方数的话,结果+1就OK了。根本不用存任何其他内容,不用计算任何多余信息。
    不说效率问题,定义应该用long,int不够的。
    差不多10多行代码就可以完成任务了。
      

  4.   

    //请不要使用package,这将会导致您的代码不能通过测试
    import java.util.Scanner;public class PerfectSquare {
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            final int N = 5; //数据的组数
            int[][] num = new int[N][2];
            for(int i = 0; i < N; i++) {
                for(int j = 0; j < 2; j++) {
                    num[i][j] = input.nextInt();
                }
            }
            
            for(int i = 0; i < N; i++) {
                int sqrtA = (int) Math.sqrt(num[i][0]);//1到最小值区间包含的完全平方数的个数
                int sqrtB = (int) Math.sqrt(num[i][1]);//1到最大值区间包含的完全平方数的个数
                int count = sqrtB - sqrtA; //相减得到最小值和最大值区间包含的完全平方数的个数
                if (Math.pow(sqrtA, 2) == num[i][0]) count++; // 如果最小值本身是一个完全平方数,个数加一。
                System.out.println(count);
            }
        }
    }不知道哪里出错了,求解答。
      

  5.   

    #include<stdio.h>
    #include<math.h>
    int main()
    {
    int a,b,sq_a,sq_b;
    while(scanf("%d %d",&a,&b))
    {
    sq_a = (int) sqrt(a);
    sq_b = (int) sqrt(b);
    printf("%d\n",sq_a*sq_a == a?sq_b-sq_a+1:sq_b-sq_a);
    }
    return 0;
    }用时2分钟写完.... 通过