Ⅰ.找数组中最大数算法:
提供几种思路:
① 用类似于比较大小的方法,从数组的第一个开始,与其他数比较,用一个整型数来表示布尔量,若这个数大于之后的任意一个数,那么布尔量为1(通过),否则0(失败),且从第二个数继续开始,以此类推。
用这种思路要考虑一个特殊情况:到最后一个数之前,还未通过,则最后一个数为最大的
这种方法呆板,且有个个特殊情况,不方便,但思路简单。
② 设置一个max量, max量被赋值为第一个数,往数组后走,只要大于这个max的量,就进行交换。
代码:
#include<stdio.h>
main()
{
int a[10]={1,2,3,4,5,44,7,8,9,10};
int i;
int max,maxb;
max=a[0];maxb=0;
for(i=0;i<10;i++)
{
if(a[i]>max)
{
max=a[i];
maxb=i;
}
}
printf("max=%d , is %d\n",max,maxb+1);
return 0;
}
这种方法我觉得更简单,而且无特殊情况
③ 直接排序
利用排序的方法(代码),双重循环即可
int a[n];//这样子对一些老的编译器可能不合适
for(i=1;i<n-1;i++)//注意这里不必到最后一个数,直到倒数第二个排好,就ok
for(j=i+1;j<=n-1;j++)
if(a[i]>a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}//从小到大
这种方法对后面的衍生题有用
衍生题:找出第二大的数,第三大的数,和第二小的数
这种的话,最方便的就是用第二种方法,直接对应即可。
而用第二种思路,方法也是很巧妙,思路是让第二大的数跟着最大的数走,结束为止
但不是很方便求第三大,第二小。。。
Ⅱ.闰年(这个烦死了,做个笔记,下次懒得翻)
if(y%4==0&&y%100!=0||y%400==0) i=29;
else i=28;
就是两种情况:能被4整除同时不能被100整除或者能被400整除。