最近闲来无事,很想找点事做,看到CSDN上的编程题,就随机挑选了一道,想试试手打发打发时间罢了,程序写完之后有,也调试过了,逻辑和结果都是正确的,但提交到网站后,竟然无法通过,真的有点纳闷,因此就想直接把这个贴在博客里面,也不枉我花了时间在这个程序上,聊以慰藉而已!
题目:给定整数区间[A,B]问其中有多少个完全平方数。 输入格式: 多组数据,包含两个正整数A,B 1<=A<=B<=2000000000。 输出格式: 每组数据输出一行包含一个整数,表示闭区间[A,B]中包含的完全平方数的个数。
挑战规则:输入样例:
1 1
1 2
3 10
3 3
输出样例:
1
1
2
0
<pre name="code" class="html">
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#define MAX_NUM 126
void get_datum(int data[],int group_num);
void handler_fun(int in_data[],int out_data[],int group_num);
void print_fun(int out_data[],int group_num);
int main(void)
{
int Group_Num;
int i_Data[MAX_NUM],o_Data[MAX_NUM/2];
printf("需要输入数据的组数:");
scanf("%d",&Group_Num);
if(Group_Num > (MAX_NUM/2))
{
printf("数据太多!\n");
return -1;
}
printf("\n");
printf("请输入数据:\n");
get_datum(i_Data,Group_Num);
handler_fun(i_Data,o_Data,Group_Num);
print_fun(o_Data,Group_Num);
return 0;
}
//进行分解处理
//1、把输入的数据存储起来
void get_datum(int data[],int group_num)//存放数据于data[],输入的组数
{
int i,j;
for(i = 0;i < group_num*2;i++)
{
for(j = 0;j <2;j++)
{
scanf("%d",&data[i+j]);
if(data[i+j] < 1 || data[i+j] > 90000)
{
printf("数据太大!\n");
exit(-1);
}
}
i++;
}
}
//2、对一个区间的问题进行处理,并存储起来
void handler_fun(int in_data[],int out_data[],int group_num)//要处理的数据in_data[],结果out_data[] ,组数group_num
{
int i,temp,temp_n,temp_i,count = 0;
double d;
for(i = 0;i < group_num*2;i++)
{
if(in_data[i] > in_data[i+1])
{
temp = in_data[i+1];
in_data[i+1] = in_data[i];
in_data[i] = temp;
}
temp_n = in_data[i];
for(temp_i = 0;temp_i <= in_data[i+1] - in_data[i];temp_i++)//1~4 1,2,3,4
{
d = sqrt(temp_n);
if(d*d - temp_n == 0)
count++;
temp_n++;
}
out_data[i/2] = count;
count = 0;
i++;
}
}
//3、把存储的数据打印出来
void print_fun(int out_data[],int group_num)
{
int i;
printf("每组完全平方数的个数分别为:\n");
for(i = 0;i < group_num;i++)
printf("%d\n",out_data[i]);
printf("\n");
}