上次理解的题目意思是从一个长100的数组中找到最长的等差数列(注意:本程序只输出最长等差数列的尾数的位置和该数组的长度)缺点:如果最长的等差数组有两个,只输出第一个.
暂时没有使用第二个数组
#include <stdio.h>
#define N 10
void main()
{
int A[N] ={3,5,7,99,11,13,15,3,457,10};
int i,j; //i,j 永远是为了循环服务,鸡肋食之无味,去了又不行
int position; //为了定位等差数列,此处为数列的尾数位置,也是所求的问题结果,需要返回
int temp,d = 0; //temp临时的d变量,作判断用,d为公差
int MaxLength = 2,count =2; //maxlength也是需要返回的问题结果,count为maxlength的计数器
/*分析思想:a# 首先看了题目知道要有个长度返回(maxlength),但是这不行的啊!只有长度不能确定
数组的位置,需要有定位的变量(position).定位可以定前面,又可以定后面.这就只能
靠自己的思维习惯了,不是一下子就晓得的.(除了你一开始就晓得具体的算法,那时记
忆程序,不是编程序.)
b# 然后就是该从那里入手了,等差数列嘛,肯定离不开公差d,也只有公差d才能够确定是不
是属于(公差为d=A[i+1]-A[i]的等差数列)
c# 分析数组相邻数据的公差,如果相等,说明是一个数列,计数器count++,又因为题目要最
长的,与maxlength作个比较,大的留下.如果不相等,说明又重新开始了新的等差数列,就
只得将count重新赋值为2了
注意:
知道为什么要奖maxlength与count赋初值为2么?
c - b = b - a;等差数列嘛,肯定是两个元素以上,一个就不是什么呢!
*/
for(i = 0; i < N-1; i++)
{
j = i+1;
temp = A[j]-A[i];
if(d != temp)
{
d = temp;
count = 2;
}
else
{
count ++;
if(count > MaxLength)
{
MaxLength = count;
position = j;
}
}
}
printf("%d,%d/n",MaxLength,position);
}
/*几乎所有的tc程序都可以在vc6.0上运行,只需要在开始加上一个#include <stdio.h>就行.
#include <filename.h>与#include "filename.h"意义相同么?
不同.前者是从标准库文件开始搜索
后者是从用户建立目录开始搜索
传值,传地址,传引用容易理解吗?
不容易,初学的我写程序的时候总是搞错了,因为我们面对的不在是具体的数字了.
而是一些不可预测的地址编号.不能够立即判断出你的参数的正确传了地址还是值
. 当程序都 写出来的时候,再查找错误的时候,函数嵌套着函数,跟踪调试把人搞晕.至
今我还不能够用的顺手,特别是那种指针的指针,引用指针.搞得不好就是返回的NULL.
感觉到与自己定义的变量习惯有关,还没有一种固定的习惯吧!
编程序的总结:
1.函数功能的确定,返回值的确定,参数的确定
2.初始变量的定义与初始化
3.输入值的范围的认证.如1<x<100.我们要来一个
if(x>1 && x<100)
{
}
else
{
printf("error");
}
4."="两边的变量类型是否相同
5.需要输出什么结果,什么类型%d,%s,%f
*/
我写的程序,总觉得不好看懂.不知道是说明不清楚,还是文字少了.但是我知道,这不是最好的程序,书上的程序都是经过千锤百练了的.我总是自己想怎么写就怎么写,只要能最快速度达到目的就行.正因为这样走了很多弯路,觉得开始学起来很难,总不能够写出整个程序来.(书上有好的方法不用,总用自己的方法),现在只要自己能够懂的,像二叉树,链表的问题,都能够写出代码来,至于是否经典是个问号?广义表,图和盏没有用过(当然艳的题目,还是要学着做的).想先用自己的方法解决问题,然后再去学习别人好的思想方法,改掉自己不好的思想方法!
没有束缚的编写出代码,现阶段不敢称为程序!