大创工联部第三次考核
题目 1:
一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级。求该青蛙跳上一个 n 级的台
阶总共有多少种跳法(先后次序不同算不同的结果)
示例:
输入 0 输出 0
输入 1 输出 1
输入 10 输出 89
解题思路:根据在草稿纸上列出前几个台阶青蛙跳的方法数可知青蛙跳法有a[i+1]=a[i]+a[i-1],从而得出结果。
代码如下:
#include<stdio.h>
int main()
{
int a[100],n,i;
printf("请输入n:");
scanf("%d",&n);
a[0]=0;
a[1]=1;
a[2]=2;
for(i=1;i<=n;i++)
{
a[i+1]=a[i]+a[i-1];
}
printf("共有%d种跳法",a[i]);
return 0;
}
运行结果:
题目 2:
顺时针螺旋矩阵
给定一个包含 mxn 个元素的矩阵(m 行,n 列),请按照顺时针螺旋顺序,返回矩
阵中的所有元素。
示例 1:
输入:
[1,2,3],
[4,5,6],
[7,8,9]
输出:[1,2,3,6,9,8,7,4,5]
解题思路:通过观察发现若要顺时针输出所有元素,则需对各行和列计数,因为每输出一行或者一列,那么下一次输出时就不应该重复输出已经输出过的数了,每输完一行或者一列就对其进行减一。
代码如下:
int main()
{
int a[10][10],i,j,m,n,k=0;
scanf("%d",&m);
scanf("%d",&n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
int s=0,d=m,f=0,g=n;
while(k<n*m)
{for(i=s,j=f;j<g;j++)
{if(k==m*n)
break;
printf("%d ",a[i][j]);
k++;}
s++;
for(i=s,j=g-1;i<d;i++)
{if(k==m*n)
break;
printf("%d ",a[i][j]);
k++;}
g--;
for(i=d-1,j=g-1;j>=f;j--)
{if(k==m*n)
break;
printf("%d ",a[i][j]);
k++;}
d--;
for(i=d-1,j=f;i>=s;i--)
{if(k==m*n)
break;
printf("%d ",a[i][j]);
k++;}
f++;
}
return 0;
}
运行结果:
题目 3:做出一个进制转换,输入一个 Int 范围的十进制整数,输入一个你想转
换的进制(2~16)进制。输出你的计算结果。
实例:
输入 243 2 输出 11110011(输入一个十进制的数 243,对应转换的为 2 进
制,输出结果 11110011)
输入 243 16 输出结果为 F3
输入 243 8 输出结果为 363
解题思路:首先得了解进制转换关系,十六进制的10~15是由A,B,C,D,E,F来代替的,所以这个要特别注意,其他的都按常规来,用你输入的数来除以你要转化的进制,得余数,通过循环继续得余数,最后将所得余数反过来输出。
代码如下:
#include<stdio.h>
int main()
{
int a[100],i,j,n,t,m=0;
printf("请输入要转换的进制");
scanf("%d",&t);
printf("请输入要转换的数");
scanf("%d",&j);
for(i=0;;i++){
if(j<t)
{a[i]=j;
m++;
break;}
else
{a[i]=j%t;
j=j/t;
m++;}
}
for(i=m-1;i>=0;i--)
{if(a[i]==10)
printf("A",a[i]);
if(a[i]==11)
printf("B",a[i]);
if(a[i]==12)
printf("C",a[i]);
if(a[i]==13)
printf("D",a[i]);
if(a[i]==14)
printf("E",a[i]);
if(a[i]==15)
printf("F",a[i]);
else
printf("%d",a[i]);
}
return 0;
}
