intFindK_Min(int * ar, int n, int k) { if(ar==NULL || k<0 || k>n)return-1; returnFindK(ar, 0, n-1, k); } intMaxS1(constint* ar, int left, int right) { return ar[right]; } intMinS2(constint* ar, int left, int right) { int min = ar[left]; for(int i = left + 1; i<=right; ++i) { if(min > ar[i]) { min = ar[i]; } } return min; } intMin(int a, int b) { return a < b ? a : b; } intMin(int a, int b, int c) { returnMin(a, Min(b, c)); } intCpair(int * ar, int left, int right) { if((right-left) <= 0) return INT_MAX; int mid = (right-left+1)/2; FindK(ar, left, right, mid);//mid为相对位置,正好是s1中最大的。 int pos = left + mid - 1;//pos为绝对下标。 int d1 = Cpair(ar, left, pos); //在左部分找到点对的最小差值 int d2 = Cpair(ar, pos+1,right);//在右部分找到点对的最小差值 int maxs = MaxS1(ar, left, pos); int mins = MinS2(ar, pos+1, right); returnMin(d1, d2, mins-maxs); } intCpair_Ar(int * ar, int n) { if(ar==NULL || n<1)return INT_MAX; elsereturnCpair(ar, 0, n-1); }
#死循环示例 while [ 1 ] do echo"run" sleep 1 done #死循环输出输入的内容,直到输入end whiletrue do echo"input" read line if [ "$line" = end ] then break fi echo"line=$line" done #输出0-9 while [ "$i" -lt 10 ] do echo"i=$i" #let "i+=1" #((++i)) i=`expr$i + 1` done
until
条件没满足时,循环执行;一旦条件满足则退出。
1 2 3 4 5 6 7
#本地找file.txt文件,隔一秒找一遍,直到找到,退出。 until [ -f file.txt ] do echo"not find file.txt" sleep 1 done echo"find file.txt"
read
read命令 -n(不换行) -p(提示语句) -n(字符个数)-t(等待时间) -s(不回显)
case
结合正则表达式的示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
whiletrue do echo"input:" read line case"$line"in yes | Y) echo"this is yes";; no | N) echo"this is no";; end) break;; *) echo"$line";; esac done #可以搭配正则表达式使用。 read line case"$line"in [Yy][Ee][Ss] | [Yy])echo"this is yes";; [Nn][Oo] | [Nn]) echo"this is no";; end) break;; *) echo"$line";; esac
练习:把多行IP地址转换为10进制
先生成n行(192.168.0.1开始)
对n个ip地址进行转换,转换后的数据放在IPint.txt文件内。
生成n行IP
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#! /bin/sh # $1: nums of ip address FILE="IPs.txt" I=1 if [ -e $FILE ] then rm$FILE fi
while [ $I -le $1 ] do echo"192.168.0.$I" >> $FILE I=$(expr$I + 1) done
read -p "请输入一个正整数:" number [$number -eq 1] && echo"$number 不是质数" && exit#错误 for i in `seq 2 $(($number-1))` do [$[$number % $i] -eq 0] && echo"$number不是质数" $$ exit#错误 done echo"$number是质数" && exit # 测试: # 输入 1 # 输出 ./zhishu.sh: line 4: [1: command not found # 1是质数 # 测试: # 输入 7 # 输出 ./zhishu.sh: line 7: [1: command not found # ./zhishu.sh: line 7: [1: command not found # ./zhishu.sh: line 7: [3: command not found # ./zhishu.sh: line 7: [2: command not found # ./zhishu.sh: line 7: [1: command not found # 7是质数