题目1:输入一个排序数组和一个值S,输出数组中两个数的和为S的任意一对数。
思路:分别用两个指针指向数组的头start和尾end。如果两个数字之和等于S输出。如果打于,则end--,再次相加。因此循环条件就是start<end.
题目2:输入正整数S,打印出所有和为S的的正整数序列。例如:15的正整数序列为:{1,2,3,4,5},{3,4,5,6},{7,8}
思路:首先我们确定的是,这个整数序列必须至少有两个数字。可以定义一个头指针start=1,尾指针 end=2。start是要小于
(S+1)/2,如果start和end的和小于s,那么添加一个end++,如果添加后等于s,打印出来。如果start加上end大于s.
那么去掉当前的start,start++.
java代码:
//题目1:输入一个排序数组和一个值S,输出数组中两个数的和为S的任意一对数。 //题目2:输入正整数S,打印出所有和为S的的正整数序列。例如:15的正整数序列为:{1,2,3,4,5},{3,4,5,6},{7,8} //2的思路:首先我们确定的是,这个整数序列必须至少有两个数字。可以定义一个头指针start=1,尾指针 end=2。start是要小于 //(S+1)/2,如果start和end的和小于s,那么添加一个end++,如果添加后等于s,打印出来。如果start加上end大于s. //那么去掉当前的start,start++. public class SumEqualsS { public void sumEqualsS(int[] a,int s){ if(a==null||a.length<2) return; int start=0;//指向数组的头,只向后移 int end=a.length-1;//指向数组的尾部,只向前移 while(start<end){ if(a[start]+a[end]==s){ System.out.println(a[start]+" "+a[end]); break; } if(a[start]+a[end]>s) end--; else start++; } } public void printAllSequence(int s){ if(s<3) return; int start=1;//指向序列的开始 int end=2;//指向序列的结束 int middle=(s+1)/2;//小的数字不能超过的中值。 int sum=start+end; while(start<middle){ if(sum==s) printS(start,end); if(sum>s&&start<middle){ sum-=start; start++; } else{ end++; sum+=end; } } } public void printS(int start, int end) { for(int i=start;i<=end;i++) System.out.print(i+" "); System.out.println(); } public static void main(String[] args){ int[] a={1,3,4,5,6,7,9}; int s=9; SumEqualsS ss=new SumEqualsS(); ss.sumEqualsS(a, s); ss.printAllSequence(15); } }