第1个回答 推荐于2016-09-27
-----------------------------------------------------------
1. 3个乘法九九表:
#include "stdio.h"
#include "conio.h"
/* ld ----> LeftDown part of the table 左下角 */
/* ur ----> UpRigth part of the table 右上角 */
void t99(int ld,int ur)
{ int i,j;
printf("\n %-3c|",'x');
for(i=1;i<10;i++)
printf("%4d",i);
printf("\n----|");
for(i=1;i<10;i++)
printf("%s","----");
printf("\n");
for(i=1;i<10;i++)
{ printf(" %-3d|",i);
for(j=1;j<10;j++)
{ if( i==j )printf("%4d",i*j); /* 对角线上的元素 */
else
{ if(ld==1 && j<i )printf("%4d",i*j); /* 输出左下角 */
else
if(ur==1 && j>i )printf("%4d",i*j); /* 输出右上角 */
else printf(" "); /* 输出4个空格 */
}
}
printf("\n");
}
}
main()
{ int i;
t99(1,1); /* 同时输出左下角和右上角 */
for(i=1;i<10;i++) printf("%s","*****");
t99(0,1); /* 不输出左下角,只输出右上角 */
for(i=1;i<10;i++) printf("%s","*****");
t99(1,0); /* 只输出左下角,不输出右上角 */
getch();
}
-------------------------------------------------------------------
2. 这个问题存在一定的问题,他并没有说明母牛多长时间生一头公牛,
也没有说母牛只生母牛,而问题问的是第n年有多少头牛?而不是第n年有多少头母牛?
以下假设母牛只生母牛,问题也问的是 :第n年有多少头母牛?
#include "stdio.h"
#include "conio.h"
main()
{ int No[100],i,n;
printf("请输入n(n<100)");
scanf("%d",&n);
for(i=0;i<3;i++) No[i]=1; /* 初始化数组,头3年都只有一头母牛 */
for(i=3;i<n;i++) No[i]=No[i-3]+No[i-1];
printf("%d",No[(n-1)%3]);
getch();
}
/* 每年牛的数目: 0 0 0 0 1 1 1 2 3 4 6 9 13 19 28 41 60 88 129 189 */
/* 第j年 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 */
/* */
/*形式改变为:
第 j-3 j-2 j-1 j 年: 相对应4年的牛的数目
j=0 : 0 0 0 0
j=1 : 0 0 0 1 <--- 初始的数量
j=2 : 0 0 1 1 <--- 1 = 前1年的基数(1) + 前面第3年的牛的数量(0,注:它们在今年都生了一头小母牛)
j=3 : 0 1 1 1 <--- 1 = 前1年的基数(1) + 前面第3年的牛的数量(0)
j=4 : 1 1 1 2 <--- 1 = 前1年的基数(1) + 前面第3年的牛的数量(1)
j=5 : 1 1 2 3 <--- 1 = 前1年的基数(2) + 前面第3年的牛的数量(1)
j=6 : 1 2 3 4 <--- 1 = 前1年的基数(3) + 前面第3年的牛的数量(1)
j=7 : 2 3 4 6 <--- 1 = 前1年的基数(4) + 前面第3年的牛的数量(2)
j=8 : 3 4 6 9 <--- 1 = 前1年的基数(4) + 前面第3年的牛的数量(2)
j=9 : 4 6 9 13 <--- 1 = 前1年的基数(4) + 前面第3年的牛的数量(2)
形式进一步改变为:
第 j-3 j-2 j-1 j 年: 相对应4年的牛的数目
j=0 : 0 0 0 0
j=1 : 0 0 0 1 ←初始的数量
j=2 : 0 0 1 1 ←——┐
↑ ↑ │
│ │ │
前面第3年的牛的数量(0)+前1年的基数(1) = 1
j=3 : 0 1 1 1 ←——┐
↑ ↑ │
│ │ │
前面第3年的牛的数量(0)+前1年的基数(1) = 1
j=4 : 1 1 1 2←———┐
↑ ↑ │
│ │ │
前面第3年的牛的数量(1)+前1年的基数(1) = 2
j=5 : 1 1 2 3←———┐
↑ ↑ │
│ │ │
前面第3年的牛的数量(1)+前1年的基数(2) = 3
j=6 : 1 2 3 4←———┐
↑ ↑ │
│ │ │
前面第3年的牛的数量(1)+前1年的基数(3) = 4
j=7 : 2 3 4 6←———┐
↑ ↑ │
│ │ │
前面第3年的牛的数量(2)+前1年的基数(4) = 6
j=8 : 3 4 6 9←———┐
↑ ↑ │
│ │ │
前面第3年的牛的数量(3)+前1年的基数(6) = 9
j=9 : 4 6 9 13←———┐
↑ ↑ │
│ │ │
前面第3年的牛的数量(4)+前1年的基数(9) = 13
以下是一个更简单的程序,但理解可能有一定难度:
#include "stdio.h"
#include "conio.h"
main()
{ int No[3],i,j,j_1,n;
printf("请输入n(n<100)");
scanf("%d",&n);
for(i=0;i<3;i++) No[i]=1; /* 初始化数组,头3年都只有一头母牛 */
for(i=3,j=0,j_1=2;i<n;i++,j_1=j,j=((j==2)?0:j+1)) No[j]=No[j]+No[j_1];
printf("%d",No[(n-1)%3]);
getch();
}本回答被提问者采纳