2014 【第六届蓝桥杯 省赛】 C C组

1. 标题:国王的遗产

#include <stdio.h>

int main()
{
	int x;
	int y;
	for(x= 11; ; x++)
	{
		if(x%4==0 && x%5==0 && x%6==0 && x%7==0 && x%8==0 && x%9==0)
		{
		y=(x-(x/4+x/5+x/6+x/7+x/8+x/9));
		if(y==11)
		{
			printf("%d", x);
			break;
		}
	}
	}
	return 0;
}

答案:2520.

2.标题:神奇6位数

 

#include <stdio.h>
#include <string.h>

int flag[10];

int val[10];

bool check2(int a)

{
         do
         {
            if(val[a%10]==0)
            {
                return false;
             }
            val[a%10]--;
            a/=10;
         }while(a>0);
         return true;
}

bool check(int a)

{
         int temp=a;
         do
         {
            flag[temp%10]++;
            temp/=10;
         }while(temp>0);
         for(int i=2;i<=6;i++)
         {
            memcpy(val,flag,sizeof(flag));
            if(!check2(a*i))
            {
                return false;
            }
         }
         return true;
}

int main()
{
         for(int i=100000;i<=999999;i++)
         {
                   memset(flag,0,sizeof(flag));
                   if(check(i))
                   {
                            printf("%d\n",i);
                   }
         }
         return 0;
}

答案:142857

3. 标题:日期差

  历史上,不同的人类聚居地可能有不同的历法,因而记录下来的资料中日期的换算就很麻烦。幸好今天我们统一使用公元纪年法。当然,这种历法对求两个日期差多少天也不是十分简便,但毕竟是可以忍受的。

    下面的程序计算了两个日期的差值,两个日期都使用公元纪年法。

    请分析程序逻辑,并推断划线部分缺失的代码。

int to_day(int y, int m, int d)
{
 int mon[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
 int day = 0;
 int i;
 for(i=1; i<y; i++){
  day += (i%4==0 && i%100!=0 || i%400==0)? 366 : 365;
 }
 
 if(y%4==0 && y%100!=0 || y%400==0) mon[2]++;
 
 for(i=1; i<m; i++){
  _____________________;  //填空位置
 }
 
 return day + d;
}

int diff(int y1, int m1, int d1, int y2, int m2, int d2)
{
 int a = to_day(y1, m1, d1);
 int b = to_day(y2, m2, d2);
 return b-a;
}

int main()
{
 int n = diff(1864,12,31,1865,1,1);
 printf("%d\n", n);
 return 0;
}

注意:通过浏览器提交答案。只填写缺少的内容,不要填写任何多余的内容(例如:说明性文字或已有符号)。

【分析】日期计算问题

        此题使用的方法是计算 从公元1年1月1日到y2年m2月d2日的天数 - 从公元1年1月1日到y1年m1月d1日的天数,并返回结果

划线处填写:

day+=mon[i]

4. 标题:拼接平方数

例如:
输入:
1 200

程序应该输出:
49
169

再例如:
输入:
169 10000

程序应该输出:
169
361
1225
1444
1681
3249
4225
4900
9025

资源约定:
峰值内存消耗 < 256M
CPU消耗  < 1000ms


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

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

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

提交时,注意选择所期望的编译器类型。

【分析】数学知识运用

        这里的拼接平方数是完全平方数的一种特殊情况,要求求出的数本身是完全平方数,并且要求存在对数的一种划分,使得两部分都是完全平方数,且不为0。

#include <stdio.h>
#include <math.h>

int getdigit(int x)   //判断一个数的位数
{
	int n=x;
	int digit= 0;
	while(n)
	{
		digit++;
		n=n/10;
	}
	return digit;
}

int is_pownum(int n)   //判断一个数是否为平方数 
{
	int temp;
	temp=sqrt(n);
	if(temp* temp== n)
	   return 1;
	else
	   return 0;
}

int main()
{
	int a, b;
	scanf("%d %d", &a, &b);
	int i, t, digit, x, y, z, s;
	if(a>= b)
	{
		for(i= b; i<= a; i++)
		{
			t= i;
			if(is_pownum(t))
			{
			digit=getdigit(t);
			for(x= 1; x< digit; x++)
			{
				s=pow(10,x);
				y=t/s;
				z=t%s;
				if(is_pownum(y) && is_pownum(z) && y!=0 && z!=0)
				{
					printf("%d\n", t);
					break;
				}
			}
		}
		}
	}
		if(a< b)
	{
		for(i= a; i<= b; i++)
		{
			t= i;
			if(is_pownum(t))
			{
			digit=getdigit(t);
			for(x= 1; x< digit; x++)
			{
				s=pow(10,x);
				y=t/s;
				z=t%s;
				if(is_pownum(y) && is_pownum(z) && y!=0 && z!=0)
				{
					printf("%d\n", t);
					break;
				}
			}
		}
		}
	}
	return 0;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值