目录
2.打印出 100~999 之间的所有水仙花数,所谓“水仙花数”是指一个3位数,其各位数字立方之和等于该数本身。例如,153是一个水仙花数,因为153=1³+5³+3³。
众所周知美国校队只因一次可以跳上1级台阶,也可以跳上2级。求该只因跳上一个n级的台阶总共有多少种跳法?
5.创建一个含有10个元素的数组,乱序输入元素后升序输出(考点:冒泡排序)
8.输入含有9个元素的有序数组,在输入一个数x,将x插入有序列中(与冒泡排序相似)。
1.求一个整形数组中最大的值.
整体思路:先定义想输入几个元素,然后在进行对数组的赋值,赋值之后,任意定义一个元素为max,然后利用循环于数组各个元素进行比较,若max小于一个数组元素,则将这个元素重新赋值给max,以此类推,到循环结束,输出max。
#include<stdio.h>
int main(){
int N;
scanf("%d",&N);//输入元素个数
int arr[N],i;
for ( i = 0; i < N; i++)//对整形数组的赋值
{
scanf("%d",&arr[i]);
}
int max=arr[0];//定义一个max为第一个值,与其他数组值进行比较,诺比其他的小则max重新赋值
for ( i = 0; i < N; i++)
{
if (max<arr[i])
{
max=arr[i];
}
}
printf("%d\n",max);//打印出max
return 0;
}
2.打印出 100~999 之间的所有水仙花数,所谓“水仙花数”是指一个3位数,其各位数字立方之和等于该数本身。例如,153是一个水仙花数,因为153=1³+5³+3³。
思路:由于100-999之间的数字,所以需要利用循环一一做判断,要数的各位数的立方和要等于这个数,则输出这个数。
#include<stdio.h>
int main(){
int i;
int a,b,c;
for ( i = 100; i < 1000; i++)//循环有100到999的数一个一个判断
{
a=i%10;//取个位数
b=i/10%10;//取十位数
c=i/100;//取百位数
if (a*a*a+b*b*b+c*c*c==i)//判断是否符合条件
{
printf("%d ",i);//输出
}
}
return 0;
}
3.输入一个数字n,打印出n行的杨辉三角序列。
思路:杨辉三角形,我们可以将其看成二维数组进行输出,首先看杨辉三角的规律,第一行就有几个数,每一行的第一个和最后一个都是1,而且数组的这个数等于上面的数与上面的左边 的数之和,所以我们可以利用这个性质,利用循环打出相对应的程序,输出,而且每输出完内层循环,要换行。
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);//输入想要几行的杨辉三角
int i,arr[n][n];//设立二维数组
for ( i = 0; i < n; i++)
{
for (int j = 0; j<=i; j++)//第几行就有几列
{
arr[i][0]=1;//第一列都是1
if (i==j)//每一行的最后列都是1
{
arr[i][j]=1;
}
if (i!=j&&j!=0)//诺不为第一列和最后一列则遵守一个数等于上面的数与其左边的数之和
{
arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
}
printf("%6d",arr[i][j]);
}
printf("\n");//每循环一次行则换行
}
return 0;
}
4.小只因跳楼梯
众所周知美国校队只因一次可以跳上1级台阶,也可以跳上2级。求该只因跳上一个n级的台阶总共有多少种跳法?
思路:该题通过计算结果可以总结出规律为类似斐波那契数列,但1不属于所以将1单独输出,二之后就是斐波那契数列,
//该题仔细算出结果找出规律,实际在是一个类似于斐波那契数列
#include<stdio.h>
int main(){
int n,num1=1,num2=1,sum;
scanf("%d",&n);
if(n==1) printf("1");//第一不属于规律,所以单独提出
if (n>=2)
{
for (int i = 1; i < n; i++)//斐波那契数列原理代码
{
sum=num1+num2;
num1=num2;
num2=sum;
}
printf("%d\n",sum);
}
return 0;
}
5.创建一个含有10个元素的数组,乱序输入元素后升序输出(考点:冒泡排序)
思路:正常输入乱序十个数组元素,需要进行大小排序,这里采用的是冒泡排序,从小到大排序,从第一个元素开始不停的与后的元素比较,若前者大于后者就交换位置,一共循环十次
//该程序不局限与10,将N改变能够对其他长度数组进行操作
#include<stdio.h>
#define N 10
int main()
{
int arr[N];
int i,j;
for ( i = 0; i < N; i++)//输入数组元素
{
scanf("%d",&arr[i]);
}
//下列是冒泡排序
for ( i = 0; i < N; i++)//交换的次数
{
for ( j = 0; j < N-1-i; j++)//进行对每个元素的对比
{
if (arr[j]>arr[j+1])//诺前者大于后者则交换位置
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for ( i = 0; i < N; i++)//正常遍历
{
printf("%d ",arr[i]);
}
return 0;
}
6.输入任意十进制整数 输出该数的8进制
例:输入19 输出23
思路:由于八进制是以八为节点,所以就对八取余,同时定义一个数组,能够方便存储这些余数,在除以八在取余存入数组,以此循环,直到N=0,由于存入是从个数开始,则需要倒叙遍历。
//若需要转换为别的进制,只需将8改为别的数
#include<stdio.h>
int main()
{
int N,arr[20],i=0;
scanf("%d",&N);
while (N)//N!=0
{
arr[i]=N%8;//根据进制的性质,对其取模,从个位数开始存入数组
N/=8;//取模之后除以进制
i++;
}
for ( i = i-1; i>=0; i--)//由于存入的是从个位存起,所以需要倒叙遍历数组
{
printf("%d",arr[i]);
}
return 0;
}
7.输入一串字符串倒序输出。
例:输入abcdefg 输出gfedcba。
思路:定义一个字符串数组,就能很好的倒叙输出这些字符,所以用gets能够整个字符串输入数组,利用strlen库函数求出len,在倒叙遍历。
#include<stdio.h>
#include<string.h>
int main(){
char arr[50];
gets(arr);//整体输入字符串
int len=strlen(arr);//求出字符串数组的长度(注意需要加头文件#include <string.h>)
for (int i = len-1; i>=0; i--)//倒叙遍历
{
printf("%c",arr[i]);
}
return 0;
}
8.输入含有9个元素的有序数组,在输入一个数x,将x插入有序列中(与冒泡排序相似)。
思路:由于是各有序数组,从最后一个数字开始,若这个大于这个数组的元素则直接赋予这个数组加一的元素,若小于这个元素,则将元素向后移动,同时这个数向前移,直到大于这个元素
//注意输入的数组为有序,若为无序的话需进行排序,可采用上一题的冒泡排序
#include<stdio.h>
#define N 20
int main()
{
int arr[N];
int i;
for ( i = 0; i < 9; i++)//对数组赋值
{
scanf("%d",&arr[i]);
}
int val;
scanf("%d",&val);
for ( i = 9; i>=0; i--)//重数组末进行元素的比较
{
if (val>arr[i])//如果大于元素则不动直接赋值第i+1个元素为val
{
arr[i+1]=val;
break;
}else arr[i+1]=arr[i];//否则小于,大的元素就向后移动
}
for ( i = 0; i < 10; i++)
{
printf("%d ",arr[i]);
}
return 0;
}