矩形覆盖:
我们可以用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;
}