四十二.航电1005解题报告
(1) /*#include<stdio.h>
int main(void)
{
int i,f1,f2,f3,b,a1,t,num;
__int64 n;
while(scanf("%d%d%I64d",&a1,&b,&n),a1||b||n)
{
int a[7][7]={0};
f1=1;
f2=1;f3=1;
for(i=3;i<=n;i++)
if(a[f1][f2])
{
t=i-a[f1][f2];
num=(n-a[f1][f2])%t;
for(i=0;i<=num;i++)
{
f3=(a1*f2+b*f1)%7;
f1=f2;
f2=f3;
}
break;
}
else
{
a[f1][f2]=i;
f3=(a1*f2+b*f1)%7;
f1=f2;
f2=f3;
}
printf("%d/n",f3);
}
}
*/
(2)//为什么不行呢?????
#include"stdio.h"
int main(void)
{
int A,B;
__int64 n,f[100000001],i;
while(scanf("%d%d%I64d",&A,&B,&n),A||B||n)
{
f[1]=f[2]=1;
for(i=0;i<n;i++)
{
f[n]=(A%7*f[n-1]%7)%7+(B%7*f[n-1]%7)%7;
}
printf("%I64d",f[n]);
}
return 0;
}
四十三.浮点参数压栈的规则:float(4 字节)类型扩展成double(8 字节)入栈。
所以在输入时,需要区分float(%f)与double(%lf),而在输出时,用%f即可。
printf函数将按照double型的规则对压入堆栈的float(已扩展成double)和double型数据进行输出。
四十四./*题目:C语言课本P77 NO.13 */
#include"stdio.h"
void print_jisuan(int n)//顺三角形,即上小下大
{
int i,j;
for(i=1;i<=n;i=i+2)
{
for(j=1;j<=n-i;j=j+1)
{
printf(" ");
}
for(j=1;j<=i;j=j+1)
{
printf("* ");
}
printf("/n");//每行空格和星号输出后就换行
}
}
void print_jsdao(int x)//倒三角形,即上小下大
{
int i,j;
for(i=1;i<=x;i=i+2)
{
for(j=i;j<=2*i;j=j+1)//如何让每趟循环输出的空格数相差2[微软用户1]
{
printf(" ");
}
for(j=x;j>=i;j=j-1)
{
printf("* ");
}
printf("/n");
}
}
int main()
{
int n,x;
scanf("%d",&n);
print_jisuan(n);
x=n-2;
print_jsdao(x);
return 0;
}
算法:通过程序可以看出我是采用顺三角形和倒三角形拼起来题目要求的图形。编程实现过程中难点在于实现倒三角形。时间复杂度O(n2)。
四十五.#include"stdio.h"
int main()
{
int r,h;
h=1.5;//此时h=1
printf("%d/n",r*h);//输出结果1,而不是2,更不是2.5
}
结论:int只定义整型变量,如当给整型变量r赋值1.5,编译器会忽略0.5,只取1;
同理,h只取1。最后1*1=1