递归函数相关题目

查找函数。
编写一个函数,利用参数传入一个3位数number,找出101~number之间所有满足下列两个条件的数:它是完全平方数,又有两位数字相同,如144、676等,函数返回找出这样的数据的个数

#define _CRT_SECURE_NO_WARNINGS 1
#include<string.h>
#include <stdio.h>
#include<math.h>
int Search(int num,int count)
{
	int i = 101;
	int x = 0, k = 0;
	int item = 0;
	int a[3] = { 0 };
	printf("请输入num\n");
	scanf("%d", &num);
	for (i = 101;i<=num; i++)
	{
		x = sqrt(i);
		item = i;
		k = 0;
		if (x * x == i)//平方数
		{
			while (item != 0)
			{
				a[k++] = item % 10;//存入数组
				item /= 10;
			}
			if ((a[0] == a[1]) || (a[0] == a[2]) || (a[1] == a[2]))//满足的条件
			{
				count++;
			}
		}
		else if (x * x > i)
		{
			break;
		}
	}
	printf("%d", count);
	return 0;
}
int main()
{
	int num = 0;
	int count = 0;
	Search(num,count);//调用函数
	return 0;
}

 1.它是完全平方数,

for (i = 101;i<=num; i++)
{
	x = sqrt(i);
	item = i;
	k = 0;
	if (x * x == i)//平方数
	

2.又有两位数字相同

while (item != 0)
{
	a[k++] = item % 10;//存入数组
	item /= 10;
}
if ((a[0] == a[1]) || (a[0] == a[2]) || (a[1] == a[2]))//满足的条件
{
	count++;
}


 2.假设有一个面值为N(1 <= N <= 10)的纸币,给定两种不同零钱:1元和2元,数目不限。
如果把这张N元的纸币换成零钱,,一共有多少种不同的换法?

#define _CRT_SECURE_NO_WARNINGS 1
#include<string.h>
#include <stdio.h>
// 递归函数求解纸币换硬币的总数
int a(int n)
{
    if (n == 0) 
    {
        return 1;
    }
    else if (n <= 0)
    {
        return 0;
    }
    else 
    {
        // 递归调用,分别减去1元和2元零钱后进行计算
        return a(n - 1) + a(n - 2);//a(3)+a(2)  a(3)=a(2)+a(1)   a(2)=a(1)+a(0)  a(2)=a(1)+a(0)
    }
}
int main() 
{
    int n=0;
    scanf("%d", &n);//纸币总钱  4
    printf("%d\n", a(n));//调用函数
    return 0;
}

3.//2.出售金鱼。小明将养的一缸金鱼分5次出售:
// 第1次卖出全部的一半加1/2条;
// 第2次卖出余下的三分之一加1/3条;
// 第3次卖出余下的四分之一加1/4条;
// 第4次卖出余下的五分之一加1/5条;
// 最后卖出余下的11条。试编程求出原来鱼缸中共有多少条鱼。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
	int i = 0;
	double a = 11;
	for (i = 5; i > 1; i--)
	{
		a = (a + 1.0 / i) / (1 - 1.0 / i);//不会表示!(11+1/5)/(1-1/5)
		//或者 n=(n+(1/i))/(i-1)*i
		//(11+(1/5))/4*5   *5/4
	}
	printf("%lf", a);
	return 0;
}

4.//2、编制一个乘法运算的程序。 
//从键盘读入2个100以内的正整数,进行乘法运算并以竖式输出。对准各位输出。
//例:
//输入:
//87x76
//输出:
//  87
//×76
//━━━
//522   //87*6
//609   //87*7
//━━━
//6612  //87*76

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
	int a = 0, b = 0;
	int i = 0,t=0;
	int h = 0,g=0,k=0;
	printf("请输入两个整数\n");
	scanf("%d%d", &a, &b);
	int m = b;
	k = a * b;
	printf("%d*%d\n", a, b);//87 76
	if (b!=0)
	{
		t = b % 10; //6 
		b = b / 10; //7
	}
	printf(" %d\n", a);
	printf("*%d\n", m);
		h = a * t;//87*6=522
		g = b * a;//76*7
		printf("----\n");
		printf(" %d\n", h);
		printf("%d\n", g);
		printf("----\n");
		printf("%d\n", k);//87*76
		return 0;
    }

 //1.立方尾不变。
//有些数字的立方的末尾正好是该数字本身。
//比如:1, 4, 5, 6, 9, 24, 25, ....
//请你计算一下,在10000以内的数字中(指该数字,并非它立方后的数值),
// 符合这个特征的正整数一共有多少个。

#define _CRT_SECURE_NO_WARNINGS 1
#include<string.h>
#include <stdio.h>
#include<math.h>
int main()
{
	long long i = 0;
	int count = 0;
	for (i = 1; i < 10000; i++)
	{
		long long  a = pow(i, 3);//int类型存储空间不够,使用long
		//分四种讨论
		if (i < 10) 
		{
			if (a % 10 == i)
			{
				count++;
			}
			
		}
		else if (i < 100) 
		{
			if (a %100 == i)
			{
				count++;
			}	
		}
		else if (i< 1000) 
		{
			if (a%1000 == i)
			{
				count++;
			}
		}
		else if (i < 10000) 
		{
			if (a%10000 == i)
			{
				count++;
			}
		}
		//或者
		//for(i=1;i<=10000;i++)
		//{
		// m=pow(i,3);//m为计算立方和
		// if(i==m%10||i==m%100||i==m%1000||i==m%10000||i==m%100000)
		// {
		// count++;
		// printf("%d\n",i);
		// }
		//}
	}
	printf("%d",count);
	return 0;
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值