给你一个数n,然后使其成为一个n层的金字塔,其中金字塔上面一个数字比它下面两个数字小。你的任务就是从最上面开始往下走,只能向下走相邻的两个数字,从第一层走到最下面一层,求出其最大值(金字塔的数据结构你要自己建,老师过来给你数据,你再在控制台上输)。

金字塔样子:

                              3

                            4  5

                           4  6  6

                       7  12  13  8   

思路:这题要注意:其实是主要还是注意每行第一个元素和每行最后一个元素。设置一个num[n][n]的二位数组从上至下相加,每行相加,最后得到的最后一行num判断哪一列num最大,初始时可以把num[n-1][0]设为max,然后这一行元素进行比较

#include<bits/stdc++.h>
#include<cstring>
using namespace std;
const int N=1001,INF=0X3f3f3f3f;  
int num[N][N]={0},f[N][N];//宏定义放到main外 

int main()
{
	int n,i,j;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=i;j++)
		{
			cin>>num[i][j];
		}
	};
	memset(f,-0x3f,sizeof(f));
	f[1][1]=num[1][1];
	for(i=2;i<=n;i++)
	{
		for(j=1;j<=i;j++)
		{
			f[i][j]=max(f[i-1][j-1],f[i-1][j])+num[i][j];
		}
	 } 
int ans=-INF;
for(j=1;j<=n;j++)
{
	ans=max(ans,f[n][j]);
 } 
 cout<<ans;	
	
}

给你一个数n,使用递归求n!

#include<bits/stdc++.h>
using namespace std;
int function(int n)
{
	//注意边界 
	if(n==0) 
	return 1;
    if(n==1)
	return 1;
 return function(n-1)*n;
}
int main()
{
	int n;
	cin>>n;
	cout<<function(n);
	
}

给你一个年份,还有一个数字n,以1月1日为第一天,然后你根据n的值来求出是几月几号 注意区分平年和闰年

要注意在for循环中使用break跳出循环,不然i会一直加,加到13,这样子输出的月份不符合题意

#include<bits/stdc++.h>
using namespace std;
void function(int year,int num)
{
	int i;
	int a1[12]={31,28,31,30,31,30,31,31,30,31,30,31};
	int a2[12]={31,29,31,30,31,30,31,31,30,31,30,31};
		if(year%400==0||year%4==0&&year%100!=0)
		{
		for(i=0;i<12;i++)
		{
			if(num>a2[i])
			{
				num-=a2[i];
			}
			else{
				break;
			}
		}
	}
else{
	for(i=0;i<12;i++)
		{
			if(num>a1[i])
			{
				num-=a1[i];
			}
			else
			{
				break;
			}
		}
}
printf("year%d, yue%d,ri%d",year,i+1,num);	
	
}
int main()
{
	int year,num;
	cin>>year>>num;
	function( year, num);
	return 0;
	
 } 

给你一串数字,实现其排序,然后把排序后重复的数字只留下一个。如(3,5,5,2,1,4,6)—>(1,2,3,4,5,6)。

去重的方式要记住

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	int i,j;
	int a[10001],c[10001];
	cin>>n;
	for(i=0;i<n;i++)
	cin>>a[i];
	int temp;
	for(i=0;i<n-1;i++)
	{
		for(j=0;j<n-1-i;j++)
		{
			if(a[j]>a[j+1])
			{
				temp =a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}
	}
//去重(之前没想到做的时候) 
c[0]=a[0];
int index=1;
for(i=1;i<n;i++) 
{
	if(a[i]!=a[i-1])
	{
		c[index]=a[i];
		index++;
	}
}
for(i=0;i<index;i++)
{
	cout<<c[i];
}
}
Logo

汇聚原天河团队并行计算工程师、中科院计算所专家以及头部AI名企HPC专家,助力解决“卡脖子”问题

更多推荐