感觉简单的笔试题
好吧,我承认我的算法比较弱,高考的时候,
数学才90多分。
求教各位大牛,怎样提高解题效率,算法需要积累,
还是靠自己想,自己越想糊涂了。尤其是笔试的时候,
一紧张,总感觉不会。下面这道题,花了好长时间还做错了,
求解决一般问题的思路及方法,有好的建议吗。
难道笔试时碰到没见过的算法题,真的会无解么。
真怀疑自己笨。
有一头母牛,第四年生一头小牛,每头小牛从第四个年头起,每年也生一头小牛。编写一个程序,求第N年,共有多少头牛。
感觉就小学奥数题,我就想了好久想不来。。。。
而且有时想问题,想着想着就想睡觉。
有什么能提高解题能力的书麽,我想自己编着程序提高下自己的逻辑思维能力。
[解决办法]
楼主,做ACM题吧,做ACM题会提高解题能力(主要是算法和数据结构),楼主是大学生吗?
[解决办法]
递归版,很轻松能转化为迭代版本
- C/C++ code
#include<stdio.h>#include<stdlib.h>int func(int _0, int _1, int _2, int _3, int _4, int years){ if (years <= 0) { return _0 + _1 + _2 + _3 + _4; } return func(_4, _0, _1, _2, _3 + _4, years - 1);}int main(){ int years; printf("input years:\n"); scanf("%d", &years); printf("totals = %d\n", func(0, 0, 0, 0, 1, years)); system("pause"); return 0;}
[解决办法]
- C/C++ code
#include<stdio.h>#include<stdlib.h>int func(int _0, int _1, int _2, int _3, int _4, int years){ return (years <= 0) ? (_0 + _1 + _2 + _3 + _4) : func(_4, _0, _1, _2, _3 + _4, years - 1);}int main(){ int years; printf("input years:\n"); scanf("%d", &years); printf("totals = %d\n", func(0, 0, 0, 0, 1, years)); system("pause"); return 0;}
[解决办法]
手痒了,写了下,结果好像和前面的代码结果不一样,欢迎大家拍砖
#include<stdio.h>
int f(int year)
{
if(year > 4)
return (f(year-1)+f(year-4));
else
return 1;
}
void main()
{
int n,total=1;
printf("please input N of year:");
scanf("%d",&n);
total = f(n);
printf("Total: %d", total);
}
[解决办法]
#include<stdio.h>
#include<stdlib.h>
int main()
{
int cow_num = 0;
int N = 0;
int i = 0;
int array_sum = 0;
int Matrix_sum = 1;
int j;
int **Matrix;
printf("Enter the year:");
scanf(" %d",&N);
//模拟一个以年为长宽的二维数组
Matrix = (int**)malloc(sizeof(int*)*N);
if(Matrix)
{
for(i=0; i<N; i++)
{
Matrix[i] = (int*)malloc(sizeof(int)*N);
if(Matrix[i] == NULL)
{
return NULL;
}
for(j=0;j<N; j++)
Matrix[i][j] = 0;
}
}
//二维数组的第i行 代表 第i年生出的小牛的总数 开始生小牛的过程
for(i=3; i<N; i++)
Matrix[0][i]=1;
for(i=1;i<N;i++)
{
for(j=0; j<N; j++)
array_sum=array_sum + Matrix[j][i];
for(j=3; j<N; j++)
Matrix[i][i+j]=array_sum;
array_sum = 0;
}
for(i=0; i<N; i++)
for(j=0; j<N; j++)
Matrix_sum=Matrix_sum+Matrix[i][j];
printf("the number of Cow is %d\n",Matrix_sum);
}
不是递推算的一种方法。。