首页 > 其他分享 >每日一题:乘法表【蓝桥杯2020省B】

每日一题:乘法表【蓝桥杯2020省B】

时间:2024-12-21 23:28:50浏览次数:7  
标签:10 进制 int 等于 蓝桥 2020 printf 大于 乘法表

目录

一、题目

二、更多测试用例

1、用例一​编辑

2、用例二​编辑

3、用例三​编辑

三、解题思路

一、题目

二、更多测试用例

1、用例一

2、用例二

3、用例三

三、解题思路

1、经阅读题目,我们可以知道,题目中的乘法表只是我们小学学过的九九乘法表的变表。它要求我们输出在不同进制下的乘法表。

这个题目中的坑在它的输出格式要求上:输出 P 进制下的乘法表。P 进制中大于等于 10 的数字用大写字母 ABC、⋯⋯ 表示。如果你只是将两数相乘的结果转换为P进制,并将P进制中大于等于 10 的数字用大写字母 ABC、⋯⋯ 表示,那你就落入坑中了。

它输出格式的意思是所有只要大于等于10的数就要用A、B、C、⋯⋯ 表示,可以看以上用例二、三。

2、我们知道九九乘法表,而九九乘法表的代码如下:

int main()
{
	//外循环控制行数,并提供1~9
	for (int i = 1; i <=9; i++)
	{
		//内循环控制列数,并提供1~9
		for (int j = 1; j <= i; j++)
		{
			//    打印出来的格式,记得空格一下以确保格式正确。
			printf("%d*%d=%d ", i, j, i * j);
		}
		//每一行打印完就进行换行
		printf("\n");
	}
	return 0;
}

而不同进制的乘法表也是以九九乘法表为框架进行更改得到的。那我们该如何做呢?

先给出在题目要求下的九九乘法表框架如下:

int main()
{
	int P;
	scanf("%d", &P);
	//外循环控制行数,并提供1~9,i<P是因为不论是几进制下的乘法表,其最大数都小于P;
	for (int i = 1; i <P; i++)
	{
		//内循环控制列数,并提供1~9
		for (int j = 1; j <= i; j++)
		{
			//    打印出来的格式,记得空格一下以确保格式正确。
			printf("%d*%d=%d ", i, j, i * j);
		}
		//每一行打印完就进行换行
		printf("\n");
	}
	return 0;
}

因为输出格式的意思是所有只要大于等于10的数就要用A、B、C、⋯⋯ 表示,所以我们要分两步。一步判断i和j是否大于等于10,一步将i*j的结果转换进制

3、我们先判断i和j是否大于等于10,并将大于等于10的用大写字母表示。这时就有一个问题,判断数字是否大于等于10很容易,但如何将大于等于10的数用大写字母表示呢?这时,我们就要用到我们的Ascll表了。表中大写字母的ascll码值为65.因此我们只需要将i+55和j+55,就可以将大于等于10的数用大写字母输出。

由九九乘法表我们可以得知i大于等于10时,j可能小于10.而j大于等于10时i一定大于等于10

由此我们可以得到以下判断代码:

int main()
{
	int P;
	scanf("%d", &P);
	//外循环控制行数,并提供1~9,i<P是因为不论是几进制下的乘法表,其最大数都小于P;
	for (int i = 1; i <P; i++)
	{
		//内循环控制列数,并提供1~9
		for (int j = 1; j <= i; j++)
		{
			if (i >= 10 && j<10)
			{
				printf("%c*%d=", i + 55, j);
			}
			else
			{
				if (j >= 10)
				{
					printf("%c*%c=", i + 55, j + 55);
				}
				else
				{
					//在i和j都小于10进行,不写等号后面的是为了方便第二步
					printf("%d*%d=", i, j, i * j);
				}
			}
		}
		//每一行打印完就进行换行
		printf("\n");
	}
	return 0;
}

4、在完成第一步后,我们来进行第二步,把i*j的结果转换,这个转化就只是单纯的对单个数的进制转换,我们知道将一个十进制数转换为其他进制,只需不断取余进制,然后反向排序即可获得。因此,我们只需写一个函数,传入的参数为i*j和P,不返回任何参数。然后在函数内对i*j的结果不断对P取余,然后再对每个余数判断和转换,最后输出即可,代码如下:

void css(int a, int p)
{
	//定义一个字符数组好储存余数,因为规定了P的范围为2~36,所以定义元素个数为10000完全够用
	char b[10000];
	//数组b的标记
	int i = 0;
	while (a)
	{
		//判断余数是否大于等于10
		if ((a % p) >= 10)
		{
			//储存并转换,同样用到了Ascll码表
			b[i++] = a % p + 55;
			//除去p,这也是这个while循环的逼近限制条件
			a = a / p;
		}
		else
		{
			//将小于10的数转化为字符,48为字符0
			b[i++] = a % p + 48;
			a = a / p;
		}

	}
	for (i = i - 1; i >= 0; i--)
	{
		//打印结果
		printf("%c", b[i]);
	}
}
int main()
{
	int P;
	scanf("%d", &P);
	//外循环控制行数,并提供1~9,i<P是因为不论是几进制下的乘法表,其最大数都小于P;
	for (int i = 1; i <P; i++)
	{
		//内循环控制列数,并提供1~9
		for (int j = 1; j <= i; j++)
		{
			if (i >= 10 && j<10)
			{
				printf("%c*%d=", i + 55, j);
			}
			else
			{
				if (j >= 10)
				{
					printf("%c*%c=", i + 55, j + 55);
				}
				else
				{
					//在i和j都小于10进行,不写等号后面的是为了方便第二步
					printf("%d*%d=", i, j, i * j);
				}
			}
			//传参
			css(i * j, P);
			//保证与题目要求的格式一致
			printf(" ");
		}
		//每一行打印完就进行换行
		printf("\n");
	}
	return 0;
}

如此这个题目就解决了,如果有更为高效或者不一样的解题思路也可于评论区留言。

标签:10,进制,int,等于,蓝桥,2020,printf,大于,乘法表
From: https://blog.csdn.net/2401_86688820/article/details/144636906

相关文章

  • P8795 [蓝桥杯 2022 国 A] 选素数
    题目描述:小蓝有一个数 x,每次操作小蓝会选择一个小于 x 的素数 p,然后在 x 成为 p 的倍数前不断将 x 加 1,(如果 x 一开始就是 p 的倍数则 x 不变)。小乔看到了小蓝进行了 2 次上述操作后得到的结果 n,他想知道 x 在一开始是多少。如果有多种可能,他想知道 x......
  • 【每日一练 基础题】[蓝桥杯 2014 国 C] 拼接平方数
    [蓝桥杯2014国C]拼接平方数拼接平方数小明发现49很有趣,首先,它是个平方数。它可以拆分为4和9,拆分出来的部分也是平方数。169也有这个性质,我们权且称它们为:拼接平方数。100可拆分1,00,这有点勉强,我们规定,0,00,000等都不算平方数。小明想:还有哪些数字是这样的......
  • 每日一题:好数【蓝桥杯 2024 省 B】
    目录一、题目二、更多示例三、解题思路一、题目二、更多示例1、输入4048   输出275.2、输入5821   输出400.3、输入10000000   输出94400.三、解题思路1、构成好数的条件:一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位……)上的数字是......
  • [网鼎杯 2020 朱雀组]phpweb1
    根据形式,猜测func是命令,p是参数,尝试修改func为phpinfo,发现被过滤了尝试绕过过滤,php中,\被认定为特殊字符,所以\phpinfo就会绕过过滤,发现index.php文件采用highlight_file显示当前页面源代码,由于页面刷新速度较快,这里建议用bp抓包或者快速复制下来(我是复制的)func=highlight_f......
  • 【蓝桥杯】43688-《Excel地址问题》
    Excel地址问题题目描述Excel单元格的地址表示很有趣,它可以使用字母来表示列号。比如,A表示第1列,B表示第2列,…Z表示第26列,AA表示第27列,AB表示第28列,…BA表示第53列,⋯⋯当然Excel的最大列号是有限度的,所以转换起来并不难。如果我们想把这种......
  • [蓝桥杯 2021 省 AB2] 国际象棋
    题目Description众所周知,“八皇后”问题是求解在国际象棋棋盘上摆放 8 个皇后,使得两两之间互不攻击的方案数。已经学习了很多算法的小蓝觉得“八皇后”问题太简单了,意犹末尽。作为一个国际象棋迷,他想研究在 N×M 的棋盘上,摆放 K 个马,使得两两之间互不攻击有多少种摆......
  • 蓝桥杯训练题(3)
    题目描述某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表......
  • P6803 [CEOI2020] 星际迷航 题解
    \(\text{P6803[CEOI2020]星际迷航题解}\)观察这个从第\(0\)棵树走向第\(D\)棵树的过程是困难的,我们难以判定走到下一棵树的情况。于是我们不妨从第\(D\)棵树向第\(0\)棵树来倒推。从第\(i\)层走向第\(i+1\)层的边为\(x\toy\)时,事实上此时\(y\)就是第\(i+1\)......
  • webstorm2020破解激活教程
    1、下载WebStorm安装包下载webstorm2021以前的安装包,目前该安装包可能不太好找,笔者在此给大家提供下载方式(包含破解包):链接:https://pan.baidu.com/s/1W3U94zHqWwAzw5FneF7lsg?pwd=6m4c提取码:6m4c2、安装WebStorm破解版下载好软件之后,直接进行安装,先选择30天免费模式......
  • (即插即用模块-Convolution部分) 六、(TIP 2020) SlimConv 超薄卷积
    文章目录1、SlimConv2、代码实现paper:SlimConv:ReducingChannelRedundancyinConvolutionalNeuralNetworksbyWeightsFlippingCode:https://github.com/JiaxiongQ/SlimConv1、SlimConv为了解决卷积神经网络(CNN)中特征图通道冗余的问题,通道冗余是指特......