猴子问题新题解?
  • 板块学术版
  • 楼主lofing
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/9/18 19:33
  • 上次更新2024/9/18 19:39:32
查看原帖
猴子问题新题解?
1275297
lofing楼主2024/9/18 19:33

猴子吃桃新题解:

p5743


ps:洛谷能不能出个自动保存帖子的功能,马上写完了点错没发布,哭死QAQ
又重写了一遍(气!

前言:

再给童鞋讲题的时候无意中发现了个规律,感觉有点用?

首先,从答案入手(前十项):

#include<iostream>
using namespace std;

int main() {
	int day,num = 1;
	cin>>day;
	while(day>1){ 
	num += 1;
	num *= 2;	
	day--;
	cout<<num<<endl;
	}
	return 0;
}
输入10,结果:
14102246941903827661534
然后去求公差
拿后一项减前一项:
36122448961923847681536

一直这么求,最后可以得到一个表格:
36122448
361224
3612
36
3

不知道有没有感觉有点熟悉的样子?

反正本蒟蒻不久前做过杨辉三角,然后就有一点点想法?QAQ

它的天数刚刚好是二维数组的行数和列数
它的同行上列是它的2倍
它的上行上列是它的数的本身

然后就可以列这么两个式子:

p1[i - 1][j] = 2 * (p1[i][j]);
p1[i - 1][j-1] = p1[i][j];


有杨辉三角的模样了有木有?


然后就浅浅的按思路打一下:

#include<iostream>
#include<string.h>
using namespace std;

int main(){
	int day;
	cin>>day; //天数 
	int p1[day][day]; 
	memset(p1,0,sizeof(p1)); //初始化 
	day -= 1;    //数组从0开始
	p1[day][day] = 3;  //最底层的3
	
	for(int i = day;i >= 0;i--){
		for(int j = day;j >= i;j--){
			p1[i - 1][j] = 2 * (p1[i][j]);   
			p1[i - 1][j-1] = p1[i][j];      
		}
	} 
		for(int i = 0;i <= day;i++){
		cout<<p1[0][i]<<endl;  //打印出来
	}	
	return 0;
}
只需要最上面的一行数据就行

然后看一下:

当输入为10的时候

输出结果:

36122448961923847681536

和第一遍求得式子是不是一样?

然后再往回做:

从第二项开始,给每一个值减二就是初始值了

#include<iostream>
#include<string.h>
using namespace std;

int main(){
	int day;
	cin>>day; //天数 
	int p1[day][day]; 
	memset(p1,0,sizeof(p1)); //初始化 
	day -= 1;    //数组从0开始
	p1[day][day] = 3;  //最底层的3
	
	for(int i = day;i >= 0;i--){
		for(int j = day;j >= i;j--){
			p1[i - 1][j] = 2 * (p1[i][j]);   
			p1[i - 1][j-1] = p1[i][j];      
		}
	} 
	cout<<"1"<<endl;  // 剩的一个
	for(int i = 1;i <= day;i++){
		cout<<p1[0][i] - 2<<endl;  //打印出来
	}	
	return 0;
}

最后,就酱紫啦,上一次就打到这里,没保存!!!蒟蒻哭死!!!QAQ


还望犇犇们指教,优化代码或者指出蒟蒻不足之处,谢谢QWQ

2024/9/18 19:33
加载中...