《PTA》6-7 统计某类完全平方数2019/09/18

6-7 统计某类完全平方数


题目:

本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144、676等。
函数接口定义:
int IsTheNumber ( const int N );

其中N是用户传入的参数。如果N满足条件,则该函数必须返回1,否则返回0。
裁判测试程序样例:
#include <stdio.h>
#include <math.h>

int IsTheNumber ( const int N );

int main()
{
int n1, n2, i, cnt;

scanf("%d %d", &n1, &n2);
cnt = 0;
for ( i=n1; i<=n2; i++ ) {
    if ( IsTheNumber(i) )
        cnt++;
}
printf("cnt = %d\n", cnt);

return 0;

}

/* 你的代码将被嵌在这里 */

输入样例:
105 500

输出样例:
cnt = 6


要点:

这道题中完全平方数的判断并不难,可以利用int与double数据类型之间精度的不同对N开方来直接判断是否符合完全平方数;
但是在第二个要求中:至少有两位数字相同,这个要求着实让我这个初学者有点头疼。因为输入数据的位数可以是任意的,所以如果要把每一位的值都求出来然后保存之后在比较,就会有这样的问题:在提前不知道位数的情况下,应该设计多大的数组来存放每一位的数据呢?后来询问了同学之后,建议我换个思路,不用保存每一位,而是提前定义一个长度为十,元素均为0的数组,以数组下标代表数字1~9,利用循环计算每一位的数值,但并不保存,而是相应的让该数组下标的元素加一。只要任意的元素值为二,就跳出循环。真是豁然开朗,有时候换个思路真的就是柳暗花明。


题解

int IsTheNumber(const int N)
{
	int i,a,b;    
	int m[10]={0};    
	if(N%8==0||N%8==1||N%8==4)/*这里应用了完全平方数的性质预先排除了5/8的数据,但其实在原题目中已经包含了<math.h>的头文件可以直接利用Int、double数据之间的差异来直接判断是否为完全平方数。    
	*/
	{        
		for (i=0;i*i<N;i++);        
		if(i*i==N)        
		{            
			a=N;            
			while(a)            
			{                
				b=a%10;                
				m[b]++;                
				if (m[b]==2)                
				{                    
					return 1;                    
					break;                
				}                
				a=a/10;            
			}        
		}        
		else return 0;    
	}    
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值