practice_矩形覆盖、显示日历、数值的整数次方

矩形覆盖:

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。

请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

实现代码:

#include<stdio.h>
#include<Windows.h>

/*
矩形覆盖:
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。
请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,
总共有多少种方法?
*/

int rectCover(int number) 
{
	if (number <= 2){
		return number;
	}
	int first = 1;
	int second = 2;
	int count = 0;
	while (number-2 > 0){
		count = first + second;
		first = second;
		second = count;
		number--;
	}
	return count;
}

int main()
{
	printf("%d\n",rectCover(3));

	system("pause");
	return 0;
}

 

解析:

规律:

1:1

2:2

3:3

4:5

5:8//得出结论,具有斐波那契数列特点(当前数等于两个项之和)

 

 

 

给出年月,输出该月日历

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

#pragma warning(disable:4996)

int month_day[2][13] = {
		{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
		{ 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
};

int year_day_sum(int year)
{
	return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0);
}

int first_presYear(int year, int startYear, int start)
{
	int total = start;
	for (int i = startYear; i < year; i++){
		total += 365 + year_day_sum(i);
	}
	return total % 7;
}

int first_premonth(year, year_first, month)
{
	int total = year_first;
	int tmp = year_day_sum(year);
	for (int i = 1; i < month; i++){
		total += month_day[tmp][i];
	}
	return total % 7;
}

void show(int year, int month, int month_first)
{
	printf("日  一  二  三  四  五  六\n");
	for (int i = 0; i < month_first; i++){
		printf("    ");
	}
	int tmp = year_day_sum(year);
	for (int i = 1; i <= month_day[tmp][month]; i++){
		printf("%-4d", i);
		if ((i + month_first) % 7 == 0){
			printf("\n");
		}
	}
	printf("\n");
}

int main()
{
	printf("year-month:");
	int year, month;
	scanf("%d-%d", &year, &month);
	//设置基准
	int startYear = 1997;
	int start = 3;
	int year_first = first_presYear(year, startYear, start);
	int month_first = first_premonth(year, year_first, month);
	show(year, month, month_first);

	system("pause");
	return 0;
}

 

 

数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

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

/*
数值的整数次方:
给定一个double类型的浮点数base和int类型的整数exponent。
求base的exponent次方。
*/
double Power(double base, int exponent) 
{
	//return pow(base, exponent);
	//不用库函数(int默认是有符号数)
	int tmp = exponent;
	if (exponent < 0){
		tmp = -tmp;
	}
	double res = 1.0;
	for (int i = 0; i < tmp; i++){
		res *= base;
	}
	if (exponent < 0){
		res = 1 / res;
	}
	return res;
}


int main()
{
	double base = 2.2;
	int exponent = 4;
	printf("%lf\n", Power(base, exponent));

	system("pause");
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值