当前位置: 首页 > news >正文

递归进阶(用递归改造循环11~20)(1082、1265、1395、1083、1066、1782、1783、1784、1008、1224)

1082. 猴子吃桃子

问题描述

猴子吃桃子问题:猴子第一天摘下若干个桃子,当即吃了一半还不过瘾,又多吃了一个;第二天又将剩下的桃子吃掉一半又多吃了一个;以后每天早上都吃了前一天剩下的一半零一个。到了第十天想再吃时,见只剩下一个桃子,求第一天共摘了多少个桃子?

输出

一个整数,第一天共有多少个桃子。

#include <bits/stdc++.h>
using namespace std;

int dfs(int x, int sum){
	if(x == 1)return sum;
	return dfs(x - 1, (sum + 1) * 2);
}

int main(){
	cout << dfs(10, 1);
	return 0;	
} 

1265. 爱因斯坦的数学题

问题描述

爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨 2 阶,则最最后剩一阶,若每步跨 3 阶,则最后剩 2 阶,若每步跨 5 阶,则最后剩 4 阶,若每步跨 6 阶则最后剩 5 阶。

只有每次跨 7 阶,最后才正好一阶不剩。

请问这条阶梯最少共有多少阶?

输出

这条阶梯最少的阶数。

#include <bits/stdc++.h>
using namespace std;

double n;
int dfs(int x){
	if(x % 2 == 1 && x % 3 == 2 && x % 5 == 4 && x % 6 == 5 && x % 7 == 0)return x;
	return dfs(x + 1);
}

int main() {
	cout << dfs(1);
	return 0;	
} 

1395. 小丽找数?

问题描述

小丽同学想在 1∼n 中找出这样的数,这个数的各个位的和不能被 2 整除也不能被 5 整除,比如 3、12、25、30、100 。这些数都满足各个位的和不能被 2 和 5 整除。
请你编程找出 1∼n 中这些数有多少个?

输入

一个整数 n(n ≤ 9999)。

输出

1∼n 中满足条件的数的个数。

样例

输入

50

输出

20

#include <bits/stdc++.h>
using namespace std;

int n, conut = 0;
void dfs(int x){
	if(x > n)return ;
	int sum = 0, t = x;
	while(t){
		sum += t % 10;
		t /= 10;
	}
	if(sum % 2 != 0 && sum % 5 != 0)conut++;
	dfs(x + 1);
	return ;
}

int main() {
	cin >> n;
	dfs(1);
	printf("%d", conut);
	return 0;
}

1083. 回文数

问题描述

回文数的定义为:如果把一个数的各个数位上的数字颠倒过来得到的新数与原数相等,则此数是回文数。例: 7,22,131,2112,31013,…都是回文数。对任意给出的一个整数 n ,经过一系列的处理,最后都能成为回文数。

处理的方法是,该数加上它的颠倒数,

例如:n = 176 ;

第一次处理后    176+671=847 ;

第二次处理后    847+748=1595 ;

第三次处理后    1595+5951=7546 ;

第四次处理后    7546+6457=14003 ;

第五次处理后    14003+30041=44044 ;

此时成为回文数,共进行 5 次处理。

问题:给出 n 后,求出使该数按照以上规则进行一系列处理后成为回文数的最少操作次数。

输入

n 一个整数(1 ≤ n ≤ 1000000 )。

输出

使 n 成为回文数的最少处理次数。

若开始给出的 n 是回文数,则输出 0 (即不需任何处理)。

样例

输入

67

输出

2

#include <bits/stdc++.h>
using namespace std;

int n, conut = 0;
bool check(int n){
	int t = n, a = 0;
	while(t){
		a = a * 10 + t % 10;
		t /= 10;
	}
	if(a == n)return 1;
	else return 0;
}

void dfs(int x){
	if(check(x))return ;
	int t = x, a = 0;
	while(t){
		a = a * 10 + t % 10;
		t /= 10;
	}
	dfs(x + a);
	conut++;
	return ;
}

int main() {
	cin >> n;
	dfs(n);
	cout << conut;
	return 0;
}

1066. 字符图形2-星号直角

问题描述

打印字符图形。

输入

一个整数( 0 < n < 10 )。

输出

一个字符图形。

样例

输入

3

输出

*

**

***

#include <bits/stdc++.h>
using namespace std;

int n, conut = 0;

void dfs(int x){
	if(x > n)return ;
	for(int j = 1; j <= x; j++){
 		cout << '*';
	}
	cout << endl;
	dfs(x + 1);
	return ;
}

int main() {
	cin >> n;
	dfs(1);
	return 0;
}

1782. 字符图形2-星号倒直角

问题描述

请打印 n 行的星号倒直角三角形。

输入

一个整数 n( n ≤ 10 )。

输出

输出如下方图所示 n 行的星号倒直角三角形。

样例

输入

3

输出

***

**

*

#include <bits/stdc++.h>
using namespace std;

int n, conut = 0;

void dfs(int x){
	if(x < 1)return ;
	for(int j = 1; j <= x; j++){
 		cout << '*';
	}
	cout << endl;
	dfs(x - 1);
	return ;
}

int main() {
	cin >> n;
	dfs(n);
	return 0;
}

1783. 数字直角(1)

问题描述

请打印 n 行的数字直角三角形。

输入

一个整数 n(n < 10)。

输出

输出如下方图所示 n 行的数字直角三角形。

样例

输入

3

输出

1

22

333

#include <bits/stdc++.h>
using namespace std;

int n, conut = 0;

void dfs(int x){
	if(x > n)return ;
	for(int j = 1; j <= x; j++){
 		cout << x;
	}
	cout << endl;
	dfs(x + 1);
	return ;
}

int main() {
	cin >> n;
	dfs(1);
	return 0;
}

1784. 数字直角(2)

问题描述

请打印 n 行的数字直角三角形。

输入

一个整数 n(n < 10)。

输出

输出如下方图所示 nn 行的数字直角三角形。

样例

输入

3

输出

1

12

123

#include <bits/stdc++.h>
using namespace std;

int n, conut = 0;

void dfs(int x){
	if(x > n)return ;
	for(int j = 1; j <= x; j++){
 		cout << j;
	}
	cout << endl;
	dfs(x + 1);
	return ;
}

int main() {
	cin >> n;
	dfs(1);
	return 0;
}

1008. 字符图形9-数字正三角

问题描述

输入一个整数打印字符图形。

输入

一个整数(0 < n < 10)。

输出

一个字符图形。

样例

输入

3

输出

   1

  222

33333

#include <bits/stdc++.h>
using namespace std;

int n, conut = 0;

void dfs(int x){
	if(x > n)return ;
	for(int j = 1; j <= n - x; j++){
			cout << ' ';
		}
		for(int j = 1; j <= x * 2 - 1; j++){
			cout << x;
		}
		cout << endl;
	dfs(x + 1);
	return ;
}

int main() {
	cin >> n;
	dfs(1);
	return 0;
}

1244. 请问一个正整数能够整除几次2

问题描述

请问一个正整数 n 能够整除几次 2?

比如: 4 可以整除 2 次 2 ,100 可以整除 2 次 2 , 9 可以整除 0 次 2 。

输入

从键盘读入一个正整数 n 。

输出

输出一个整数,代表 n 能够整除 2 的次数。

样例

输入

8

输出

3

#include <bits/stdc++.h>
using namespace std;

int n, conut = 0;

void dfs(int x){
	if(x % 2 != 0)return ;
	conut++;
	dfs(x / 2);
	return ;
}

int main() {
	cin >> n;
	dfs(n);
	cout << conut << endl;
	return 0;
}

相关文章:

  • 树的深度优先(DFS)和广度优先(BFS)算法
  • Nginx相关漏洞解析
  • Redis 版本演进及主要新特性
  • 常见框架漏洞攻略-Spring篇
  • 拓扑排序(算法基础)
  • 针对信息化软硬件设备:常用询价网站是否够用
  • 【Unity3D脚本与系统设计6】鼠标触摸超时待机实现
  • 全排列 | 下一个排列
  • CSS3学习教程,从入门到精通,CSS3 浮动与清除浮动语法知识点及案例代码(14)
  • 计算机二级:文件操作
  • C语言部分代码
  • 深入理解指针(2)(C语言版)
  • MySQL基本函数
  • UE4学习笔记 FPS游戏制作20 重写机器人和玩家死亡 切换相机和模型
  • 【leetcode hot 100 739】每日温度
  • 关系图:赋能数据可视化的动态扩展
  • 微服务中的服务发现与注册中心
  • python之网络编程
  • zabbix添加IIS网站计数器(并发连接数)
  • jupyter使用过程中遇到的问题
  • 网站网站建设专业/网站平台做推广
  • 网站开发工具/想做网站找什么公司
  • 个人做网站开工作室/东莞推广系统
  • 有哪些企业可以做招聘的网站有哪些方面/高质量外链平台
  • 公司常用网站开发软件/推广引流渠道有哪些
  • 香港人 网站备案/浙江新手网络推广