PTA基础练习——统计某类完全平方数(C)

PTA基础练习——统计某类完全平方数(C),第1张

题目介绍

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

函数接口定义:

int IsTheNumber ( const int N );

其中N是用户传入的参数。如果N满足条件,则该函数必须返回1,否则返回0。

裁判测试程序样例:

#include 
#include 
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 IsTheNumber ( const int N )
{
	int n = N; 
	int a[100]={0};
	int value = sqrt(N);
	if(value*value == N)
	{
		int d;
		while(n) 
		{
			d = n%10;
			n = n/10;
			a[d]++;            //出现一次为对应的元素加一
			if(a[d]>=2)        //某一数组元素大于二,说明有相同数字
				return 1;
		}
	} 
	return 0;
}

个人提交代码:

int IsTheNumber ( const int N )
{
    int s[20];
    int M=N;
    int x=0,y=0;
    for(int q=3;q<=M/2;q++)
    {
    	if(N==q*q&&N>10)
    	{
		x=1;}
	}
    int len=(int)log10(M)+1;
    if(x==1)
    {
        for(int i=0;i<len;i++)
        {
            s[i]=M%10;
            M=M/10;
        }
        for(int j=0;j<len;j++)
        {
            for(int p=len-1;p>j;p--)
            {
                if(s[j]==s[p])
                    y= 1;
            }
        }
        if(y==1)
        {
		return 1;}
        else 
		{
		return 0;}
    }
    else 
        return 0;
}

问题总结:

1 math.h头文件中sqrt(x)函数应用不熟练。函数要求x为浮点型数据,因此在调用sqrt(x)函数时,常常涉及强制数据类型转换;sqrt(x)要求x大于0,返回值为平方根,精度取决于C语言开发环境设置的精度。如为了获得某数的平方根整数部分,方法:int value = sqrt(n);
2 使用for循环遍历所有情况以判断某种情况是否会发生时,内部语句应为if(某事发生) { x=1; } 之类的,不可继续else,否则在接下来的遍历中,x的值会被更新,出循环时,x的值为最后一次情况下的x,因此无法达到目标要求。
3 学习答案中判断同一数字出现多次的思路方法——通过循环遍历每一位数字,用某一数组不同元素存储各数字出现频率。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/722890.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存