第五届在线编程大赛月赛第一题:完全平方

csdn上面一个赛事题目:具体要求代码中有

package com.junl.scott.fifthprogramming;

import java.util.ArrayList;
import java.util.List;

/*
 * 
 * 题目:第五届在线编程大赛月赛第一题:完全平方
 * 
 * 题意:给定整数区间[A,B]问其中有多少个完全平方数。 输入格式: 多组数据,包含两个正整数A,B 1<=A<=B<=2000000000。 输出格式: 每组数据输出一行包含一个整数,表示闭区间[A,B]中包含的完全平方数的个数。 
 *挑战规则: 输入样例 1 1 1 2 3 10 3 3 输出样例: 1 1 2 0 
 */

public class OnePerfectSquare
{
	/*
	 * 主方法
	 */
	public static void main(String[] args)
	{
		List<Integer> results = null;
		results = OnePerfectSquare.getResults(OnePerfectSquare.initNumber());
		for (Integer result : results)
			System.out.println(result);
	}

	/*
	 * 初始化数字
	 */
	public static List<NumberGroup> initNumber()
	{
		List<NumberGroup> numberGroups = new ArrayList<NumberGroup>();
		numberGroups.add(new NumberGroup(100, 200));
		numberGroups.add(new NumberGroup(20, 40));
		numberGroups.add(new NumberGroup(10, 1000));
		numberGroups.add(new NumberGroup(300, 400));
		numberGroups.add(new NumberGroup(30, 70));
		return numberGroups;
	}

	/*
	 * 向返回结果中加值
	 */
	public static List<Integer> getResults(List<NumberGroup> numberGroups)
	{
		List<Integer> resultList = new ArrayList<Integer>();
		// 循环调用
		for (NumberGroup numberGroup : numberGroups)
		{
			resultList.add(OnePerfectSquare.getResult(numberGroup.getFirthNumber(), numberGroup.getSecondNumber()));
		}
		return resultList;
	}

	/*
	 * 根据两个数字获取取值范围的个数
	 */
	public static int getResult(int firthNumber, int secondNumber)
	{
		int result = 0;
		int numberResult = 0;
		// 循环读取
		for (int i = (int) Math.sqrt(firthNumber); i < (firthNumber + secondNumber) / 2; i++)
		{
			numberResult = i * i;
			if (firthNumber <= numberResult && numberResult <= secondNumber)
				result++;
		}
		return result;
	}
}

/*
 * 定义数据组 两个变量
 */
class NumberGroup
{
	private int firthNumber;
	private int secondNumber;

	// 给出一个构造函数,可以不用每次实例化出来
	public NumberGroup(int firthNumber, int secondNumber)
	{
		this.firthNumber = firthNumber;
		this.secondNumber = secondNumber;
	}

	public int getFirthNumber()
	{
		return firthNumber;
	}

	public void setFirthNumber(int firthNumber)
	{
		this.firthNumber = firthNumber;
	}

	public int getSecondNumber()
	{
		return secondNumber;
	}

	public void setSecondNumber(int secondNumber)
	{
		this.secondNumber = secondNumber;
	}

}


 

在做完以后突然发现我SB了,我为什么要这样,完全可以求出两个数的平方根,根据这个范围来找就省去很多事,也没这么复杂,这么难理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值