等差数列问题

 

上次理解的题目意思是从一个长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 
*/   
我写的程序,总觉得不好看懂.不知道是说明不清楚,还是文字少了.但是我知道,这不是最好的程序,书上的程序都是经过千锤百练了的.我总是自己想怎么写就怎么写,只要能最快速度达到目的就行.正因为这样走了很多弯路,觉得开始学起来很难,总不能够写出整个程序来.(书上有好的方法不用,总用自己的方法),现在只要自己能够懂的,像二叉树,链表的问题,都能够写出代码来,至于是否经典是个问号?广义表,图和盏没有用过(当然艳的题目,还是要学着做的).想先用自己的方法解决问题,然后再去学习别人好的思想方法,改掉自己不好的思想方法!
                          没有束缚的编写出代码,现阶段不敢称为程序!
                                                                
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值