1.1题目

1.2代码
#include<stdio.h>
long long fac(int n){
if(n<=0)return 0;
if(n==1)return 1;
return fac(n-1)+fac(n-2);
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
for(int i=1;i<=n;i++){
for(int j=0;j<2*i-1;j++){
printf("%lld ",fac(j));
}
printf("\n");
}
}
return 0;
}
1.3解题思路
本题与找规律和递归有关。
1.首先注意题目,多组输入,那就利用while循环不断输入,直到到达终止条件。那么看着题目给的示例,可能一开始觉得没什么关联,纯计算,但是注意每行数的数量,都与所在行有关,第一行按下标来看,第一行为1,数量为1,第二行下标为2,数量为3,推出式子(2*n-1),这就确定了。之后来看用递归函数将这些位置上的数表示出来,又看数值的规律,我们注意到,从第三个数开始,该位置的数值是前两个位置上的数相加,这样就好写了。
2.根据我们确定的这些规律,在主函数前先定义一个递归函数。这个函数用于计算每个行列位置的值,注意如果这个位置是0/1,那么返回什么值,因为用前两个数相加得到值是从第三个数开始,所以前两个数的值需要确定。
3.在主函数里利用循环调用递归函数,注意输出格式,两个数之间需要空格。并且每行数计算后需要换行。
综上所有代码完成之后,检查程序是否能够运行。
1.4总结
本题实质上是在找规律,遇到这种看着是需要计算的一般都可以先找找规律。
2.1题目

2.2代码
#include<stdio.h>
int main()
{
int a[10];
for(int i=0;i<10;i++){
scanf("%d",&a[i]);
}
int m,n;
scanf(" m:%d",&m);
scanf(" n:%d",&n);
int i=m,j=m+n-1;
while(i<j){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
i++;
j--;
}
for(int i=0;i<10;i++){
printf("%d ",a[i]);
}
return 0;
}
2.3解题思路
本题是数字的交换,根据题目给的位置,对数字交换后输出。
1.首先,根据题目要求,先输入十个数,不过需要利用数组将他们储存起来,以便后面的循环利用,根据题目要求我们还需要输入m,n,不过输入需要根据格式来输入,并且格式字符的输入,输入语句前面需要加上空格,这样会自动跳过空白符。根据输入的m,n值开始交换值。
2.从m开始,注意循环的条件,m开始加1,不需要一直加到m+n-1,这相当于没交换。交换之后将数组里的数输出。
综上所有代码完成之后,检查程序是否能够运行。
2.4总结
本题是依据数组下标来交换值。
3.1题目

3.2代码
#include<stdio.h>
int main()
{
float o,h,l,c;
scanf("%f %f %f %f",&o,&h,&l,&c);
if(c<o){
printf("BW-Solid");
}
else if(c>o){
printf("R-Hollow");
}
else {
printf("R-Cross");
}
int x=(l<o&&l<c);
int y=(h>c&&h>o);
if(x&&y){
printf(" with Lower Shadow and Upper Shadow");
}
else if(x){
printf(" with Lower Shadow");
}
else if(y){
printf(" with Upper Shadow");
}
return 0;
}
3.3解题思路
本题是依据题目要求输出,注意条件语句,这个题只有两种输出,只有两种条件语句。
1.根据题目要求输入四个变量,根据这四个变量来考虑输出,这里先考虑第一个输出的是什么,根据条件判断输出什么,注意语句以及条件。第二个输出:第二个输出有三种情况,为了不让代码过于繁琐,我们将条件用变量表示,这样就可以直接在条件语句里用了,根据不同的条件输出第二个。
综上所有代码完成之后,检查程序是否能够运行。
3.4总结
本题是条件语句的运用。
4.1题目

4.2代码
#include<stdio.h>
int main()
{
int A;
scanf("%d",&A);
int a[4];
for(int i=0;i<4;i++){
a[i]=A+i;
}
int count=0;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
for(int k=0;k<4;k++){
if(i!=j&&i!=k&&j!=k){
int term=a[i]*100+a[j]*10+a[k];
printf("%d",term);
count++;
if(count%6==0)printf("\n");
else printf(" ");
}
}
}
}
return 0;
}
4.3解题思路
这个题看着示例我们知道开头的那个数字(百位),有四种可能,从A开始的连续的四个数字,每一排以这四个数字开头。
1.先定义一个数组储存这四个数,因为后面也是用这四个数组成三位数,然后三层for循环来输出每一行的值,输出的三位数,每个数字不相同,并且每六个数字就需要换行,并且每个数字之间需要空格隔开。
综上所有代码完成之后,检查程序是否能够运行。
4.4总结
是简单的遍历,找到数字不相同的三位数,注意输出格式。