蓝桥训练赛 (14点--18点 19点--21点20)

今天打得两场场线上赛了,由于部分题目之前看过,所以写的稍微好点,不过这没什么得意的,毕竟比赛就没这种原题了。这场从19点打到21点20左右,思路还是不怎么明确!特别是那题进制题,明明可以直接处理完再对数组处理,却想复杂了。幸亏最后回头是岸了。

AC1:

标题:九宫幻方

    小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行、每一列和每一条对角线的和都是相同的。
	
    三阶幻方又被称作九宫格,在小学奥数里有一句非常有名的口诀:“二四为肩,六八为足,左三右七,戴九履一,五居其中”,通过这样的一句口诀就能够非常完美的构造出一个九宫格来。
	
4 9 2
3 5 7
8 1 6

    有意思的是,所有的三阶幻方,都可以通过这样一个九宫格进行若干镜像和旋转操作之后得到。现在小明准备将一个三阶幻方(不一定是上图中的那个)中的一些数抹掉,交给邻居家的小朋友来进行还原,并且希望她能够判断出究竟是不是只有一个解。
	
    而你呢,也被小明交付了同样的任务,但是不同的是,你需要写一个程序~

输入格式:
输入仅包含单组测试数据。
每组测试数据为一个3*3的矩阵,其中为0的部分表示被小明抹去的部分。
对于100%的数据,满足给出的矩阵至少能还原出一组可行的三阶幻方。

输出格式:
如果仅能还原出一组可行的三阶幻方,则将其输出,否则输出“Too Many”(不包含引号)。

样例输入
0 7 2
0 5 0
0 3 0

样例输出
6 7 2
1 5 9
8 3 4

资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 1000ms


请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

注意:
main函数需要返回0;
只使用ANSI C/ANSI C++ 标准;
不要调用依赖于编译环境或操作系统的特殊函数。
所有依赖的函数必须明确地在源文件中 #include <xxx>
不能通过工程设置而省略常用头文件。

提交程序时,注意选择所期望的语言类型和编译器类型。

--------------

笨笨有话说:
    我最喜欢这类题目了。既然九宫幻方一共也没有多少,我就不辞辛劳地一个一个写出来好了。
	也不能太过分,好歹用个数组。    

#include<stdio.h>
#include<string.h>
/*
4 9 2
3 5 7
8 1 6
*/
int hf[8][3][3]={
	4,9,2,3,5,7,8,1,6,
	2,9,4,7,5,3,6,1,8,
	8,3,4,1,5,9,6,7,2,
	4,3,8,9,5,1,2,7,6,
	6,1,8,7,5,3,2,9,4,
	8,1,6,3,5,7,4,9,2,
	2,7,6,9,5,1,4,3,8,
	6,7,2,1,5,9,8,3,4
};

int main()
{
	int ex[3][3],i,j,count=0,k,flag=0,answer;
	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
			scanf("%d",&ex[i][j]);
	for(i=0;i<8;i++)
	{
		for(j=flag=0;j<3 && !flag;j++)
			for(k=0;k<3;k++)
			{
				if(ex[j][k]!=0)
				{
					if(ex[j][k]!=hf[i][j][k])
					{
						flag=1;
						break;
					}
				}
			}
		if(!flag)
		{
			count++;
			answer=i;
		}
	}
	if(count==1)
	{
		for(i=0;i<3;i++)
		{
			printf("%d",hf[answer][i][0]);
			for(j=1;j<3;j++)
				printf(" %d",hf[answer][i][j]);
			printf("\n");
		}
	}
	else
		printf("Too Many\n");
	return 0;
}
AC2:
标题: Excel地址

Excel单元格的地址表示很有趣,它使用字母来表示列号。
比如,
A表示第1列,
B表示第2列,
Z表示第26列,
AA表示第27列,
AB表示第28列,
BA表示第53列,
....

当然Excel的最大列号是有限度的,所以转换起来不难。
如果我们想把这种表示法一般化,可以把很大的数字转换为很长的字母序列呢?

本题目既是要求对输入的数字, 输出其对应的Excel地址表示方式。

例如,
输入:
26
则程序应该输出:
Z

再例如,
输入:
2054
则程序应该输出:
BZZ

我们约定,输入的整数范围[1,2147483647]

资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 1000ms


请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

注意:
main函数需要返回0;
只使用ANSI C/ANSI C++ 标准;
不要调用依赖于编译环境或操作系统的特殊函数。
所有依赖的函数必须明确地在源文件中 #include <xxx>
不能通过工程设置而省略常用头文件。

提交程序时,注意选择所期望的语言类型和编译器类型。

------------------------------

笨笨有话说:
    这有点像进制关系,又不完全是。好像末2位是以1当26,末3位是以1当26*26

歪歪有话说:
    要是从字母序列转数字还好点,倒过来有点麻烦,不过计算机跑得快啊。




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

typedef long long ll;

int main()
{
	ll data,i,mod[7],len=0;
	int kz[20]={0};
	for(mod[0]=1,i=1;i<7;i++)
		mod[i]=mod[i-1]*26;
	cin>>data;
	while(data)
	{
		kz[len++]=data%26;
		data/=26;
	}
	for(i=0;i<len;i++)
	{
		if(kz[i]<=0)
		{
			kz[i+1]--;
			kz[i]+=26;
		}
	}
	if(kz[len]<0) len--;
	for(i=len-1;i>=0;i--)
		printf("%c",kz[i]-1+'A');
	printf("\n");
	return 0;
}

AC3:
标题:字母组串

由 A,B,C 这3个字母就可以组成许多串。
比如:"A","AB","ABC","ABA","AACBB" ....

现在,小明正在思考一个问题:
如果每个字母的个数有限定,能组成多少个已知长度的串呢?

他请好朋友来帮忙,很快得到了代码,
解决方案超级简单,然而最重要的部分却语焉不详。

请仔细分析源码,填写划线部分缺少的内容。

#include <stdio.h>

// a个A,b个B,c个C 字母,能组成多少个不同的长度为n的串。
int f(int a, int b, int c, int n)
{
	if(a<0 || b<0 || c<0) return 0;
	if(n==0) return 1; 
	
	return ______________________________________ ;  // 填空
}

int main()
{
	printf("%d\n", f(1,1,1,2));
	printf("%d\n", f(1,2,3,3));
	return 0;
}

对于上面的测试数据,小明口算的结果应该是:
6
19


注意:只填写划线部分缺少的代码,不要提交任何多余内容或说明性文字。


f(a-1,b,c,n-1)+f(a,b-1,c,n-1)+f(a,b,c-1,n-1)

计蒜客上的那场虽然混了个90名,不过发现还是菜,几乎没A几题,感觉思路还可以的全错了.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小胡同的诗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值