只敢做简单题的菜鸡——c语言

热爱、奔跑 2022-01-15 23:49:25

1.如果整数a是整数b的整数倍,则称b是a的约数。请问,有多少个正整数既是2020的约数,又是3030的约数。

对于大佬来说,这道题不在话下,我的话只能用很麻烦的方法来写:

#include<stdio.h>
int main()
{
	int x=2020,y=3030;
	for(int q=1;q<2020;q++)
	{
		if(x%q==0)
		{
			printf("%d\n",q);

		}
	}
	for(int b=1;b<3030;b++)
	{
		if(y%b==0)
		{
			printf("%d\n",b);
		}
	}
	return 0;
}

得到:

 在这里面找到相同的数字,就既是2020的也是3030的约数了。

那么这里稍微改一下就可以变成算有几个约数了。

#include<stdio.h>
int main()
{
	int x=2020,y=3030,sum1=0,sum2=0;
	for(int q=1;q<1010;q++)  //注意这里变成了数字的1/2
	{
		if(x%q==0)
		{
			sum1++;
		}
	}
	for(int b=1;b<1515;b++)
	{
		if(y%b==0)
		{
			sum2++;
		}

	}
		printf("%d,%d",sum1+1,sum2+1);  //+1的原因是,这个程序本身没有算自己,自己也算是约数。
	return 0;
}

数一下子,发现是对的。ok

2.

图片描述

上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。

 

#include<stdio.h>
#include<algorithm>
using namespace std;
const int maxn=100;
int f[maxn][maxn],dp[maxn][maxn],sum1=0,sum2=0;
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=i;j++)
		{
			scanf("%d",&f[i][j]);
		}
	}  //输入数塔
	for(int j=1;j<=n;j++)
	{
		dp[n][j]=f[n][j];
	}  //从边界开始计算,即最后一行
	for(int i=n-1;i>=1;i--)  //从下往上
	{
		for(int j=1;j<=i;j++)
		{
			dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+f[i][j];  //令上一行的选中的那个数字与下一行和以后的数字的和中较大的那个做比
		}
	}
	printf("%d",dp[1][1]);
	return 0;
	}

得到答案是30。

那如果它规定了向左下走的次数与向右下走的次数相差不能超过1该怎么办呢?

明天接着想吧,今天想了好久都没想出来。。。。。。。

...全文
158 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-编程语言 发布问题, 以便更快地解决您的疑问

30,369

社区成员

发帖
与我相关
我的任务
社区描述
打造最热爱学习的高校社区,帮助大家提升计算机领域知识,带大家打比赛拿奖,提高自我,希望大家共同创造良好的社区氛围。
社区管理员
  • 川川菜鸟
  • 亡心灵
  • 星辰菜鸟
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

监督大家学习,每日学习打卡,以投稿形式打卡。扫码关注公众号,可加入粉丝群和领取大量资源。

试试用AI创作助手写篇文章吧