前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >蓝桥杯程序设计大赛第四届省赛本科B组

蓝桥杯程序设计大赛第四届省赛本科B组

作者头像
杨鹏伟
发布2020-09-11 14:57:35
3120
发布2020-09-11 14:57:35
举报
文章被收录于专栏:ypwypw

大数学家高斯有个好习惯:无论如何都要记日记。

他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210

后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢? 高斯出生于:1777年4月30日。

在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。

高斯获得博士学位的那天日记上标着:8113

请你算出高斯获得博士学位的年月日。 提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21

请严格按照格式,通过浏览器提交答案。 注意:只提交这个日期,不要写其它附加内容,比如:说明性的文字。

代码语言:javascript
复制
# include <stdio.h>
int isLeap(int y);
int nday(int y, int m, int d);
void ymd(int n);
int main(void)
{
	int n = 8113;
	int yb = 1777, mb = 4, db = 30;    //birth
	n = n - 1 + nday(yb, mb, db);
	int yp, np;    //print
	for(int i = yb; n > 0; i++) {
		yp = i;
		np = n;
		if(isLeap(i)) {
			n -= 366;
		} else {
			n -= 365;
		}
	}
	printf("%d-", yp);
	ymd(np);
	return 0;
}
int nday(int y, int m, int d)
{
	int n = 0;
	int a[2][12] = {{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, 
	                {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
	for(int i = 0; i < (m - 1); i++) {
		n += a[isLeap(y)][i];
	}
	n += d;
	return n;
}
void ymd(int n)
{
	int a[2][12] = {{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, 
	                {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
	int mp, dp;
	for(int i = 0; n > 0; i++) {
		dp = n;
		mp = i;
		n -= a[isLeap(i)][i];
	}
	printf("%d-%d\n", mp + 1, dp);
}
int isLeap(int y)
{
	if((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
		return 1;
	} else {
		return 0;
	}
}

小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。

有一次,老师出的题目是:36 x 495 = ?

他却给抄成了:396 x 45 = ?

但结果却很戏剧性,他的答案竟然是对的!!

因为 36 * 495 = 396 * 45 = 17820

类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54

假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)

能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?

请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。

满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。 答案直接通过浏览器提交。 注意:只提交一个表示最终统计种类数的数字,不要提交解答过程或其它多余的内容。

暴力解法:

代码语言:javascript
复制
#include <iostream>
using namespace std;
int main()
{
	int a,b,c,d,e,count=0;
	for(a=1;a<=9;a++)
		for(b=1;b<=9;b++)
			for(c=1;c<=9;c++)
				for(d=1;d<=9;d++)
					for(e=1;e<=9;e++)
					{
						if((a!=b&&a!=c&&a!=d&&a!=e&&b!=c&&b!=d&&b!=e&&c!=d&&c!=e&&d!=e)&&((a*10+b)*(c*100+d*10+e)==(c*10+e)*(a*100+d*10+b)))
							count++;		
					}
	cout<<count;
	return 0;

}

如下的代码判断 needle_start指向的串是否为haystack_start指向的串的前缀,如不是,则返回NULL。

比如:”abcd1234″ 就包含了 “abc” 为前缀

char* prefix(char* haystack_start, char* needle_start) { char* haystack = haystack_start; char* needle = needle_start; while(*haystack && *needle){ if(______________________________) return NULL; //填空位置 } if(*needle) return NULL; return haystack_start; } 请分析代码逻辑,并推测划线处的代码,通过网页提交。 注意:仅把缺少的代码作为答案,千万不要填写多余的代码、符号或说明文字!!

代码语言:javascript
复制
*haystack++!=*needle++

100 可以表示为带分数的形式:100 = 3 + 69258 / 714

还可以表示为:100 = 82 + 3546 / 197

注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。

类似这样的带分数,100 有 11 种表示法。

题目要求: 从标准输入读入一个正整数N (N<1000*1000) 程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。 注意:不要求输出每个表示,只统计有多少表示法! 例如: 用户输入: 100 程序输出: 11 再例如: 用户输入: 105 程序输出: 6 资源约定: 峰值内存消耗 < 64M CPU消耗 < 3000ms 请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。 所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。 注意: main函数需要返回0 注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。 注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。

代码语言:javascript
复制
# include <stdio.h>
# include <string.h>

char flag[10];
char backup[10];

int check(int n)
{
	do {
		flag[n % 10]++;
	} while(n /= 10);
	if(flag[0] != 0) {
		return 1;
	}
	for(int i = 1; i < 10; i++) {
		if(flag[i] > 1) {
			return 1;
		}
	}
	return 0;
}

int checkAll(void)
{
	for(int i = 1; i < 10; i++) {
		if(flag[i] != 1) {
			return 1;
		}
	}
	return 0;
}

int main(void)
{
	int num;
	int count = 0;
	scanf("%d", &num);
	int left, right, up, down;
	for(left = 1; left < num; left++) {
		memset(flag, 0, 10);
		if(check(left)) {
			continue;
		}
		memcpy(backup, flag, 10);
		for(down = 1; down < 100000; down++) {
			memcpy(flag, backup, 10);
			up = (num - left) * down;
			if(check(down) || check(up)) {
				continue;
			}
			if(! checkAll()) {
				//printf("%d = %d + %d / %d\n", num, left, up, down);
				count++;
			}
		}
	}
	printf("%d\n", count);
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档