经典-输出规律的数字序列

第1章 问题:

群友问了个问题:我shell,我怎么才只打出100,110,120.....190  201,211,......291  ,302,312,322....392 这种格式的数据

第2章 问题分析

2.1 需求:

我这个会用在数据库,前面10个库,我如果是第一个库,我就会建表00 10  20 。。。90 。第二个库就用01 ,11 ,,,91

2.2 分析

一个循环加一个if就可以,干嘛双循环呢

因为不管怎么变,步进都是10,所以根本没必要1个1个循环,10个10个就行

这时候就得考虑每到100的时候+1

所以就这么个思路

此处感谢潜艇大叔,提供思路。

2.3 想要的结果

110
120
130
140
150
160
170
180
190
211
221
231
241
251
261
271
281
291
312
322
332
342
352
362
372
382
392
413
423
433
443
453
463
473
483
493
514
524
534
544
554
564
574
584
594
615
625
635
645
655
665
675
685
695
716
726
736
746
756
766
776
786
796
817
827
837
847
857
867
877
887
897
918
928
938
948
958
968
978
988
998
1019
1029
1039
1049
1059
1069
1079
1089
1099

第3章 解答方法

注:(为了节约空间只显示到500

3.1 方法一-awk01-循环+判断

[[email protected] scripts]# awk ‘BEGIN{for(i=100;i<=500;i+=10){j++;print i;if(j%10==0)i++}}‘
100
110
120
130
140
150
160
170
180
190
201
211
221
231
241
251
261
271
281
291
302
312
322
332
342
352
362
372
382
392
403
413
423
433
443
453
463
473
483
493

思路很简单,通过j变量控制循环,每10次 使得i的值+1(既i++)

目的是达到 201  302 403  这种效果。

3.2 方法二-awk02-循环+三目运算符

[[email protected] scripts]# awk ‘BEGIN{for(i=100;i<=500;i+=10){j++;print(j%10==0?i++:i)}}‘
100
110
120
130
140
150
160
170
180
190
201
211
221
231
241
251
261
271
281
291
302
312
322
332
342
352
362
372
382
392
403
413
423
433
443
453
463
473
483
493

三目运算符:相当于if xxx ;then   xxxx; xxx     fi 条件判断。

也是很好的方法。


3.3 方法三-shell01-循环+判断

#!/bin/bash
for((i=100;i<=$1;i+=10))
do
 let j++
echo $i
  if [ $((j%10)) -eq 0 ];then
   let  i++
  fi
 
done
[[email protected] scripts]# sh  seq.sh  500
100
110
120
130
140
150
160
170
180
190
201
211
221
231
241
251
261
271
281
291
302
312
322
332
342
352
362
372
382
392
403
413
423
433
443
453
463
473
483
493

awk可以做,其实shell也可以实现的。

思路一致的。


3.4方法四-shell02-循环+三目运算符

#!/bin/bash
for((i=100;i<=500;i+=10))
do
 let j++
 echo $((j%10==0?i++:i))
done
[[email protected] scripts]# sh seq.sh  500
100
110
120
130
140
150
160
170
180
190
201
211
221
231
241
251
261
271
281
291
302
312
322
332
342
352
362
372
382
392
403
413
423
433
443
453
463
473
483
493

shell也不甘示弱,我也有三目运算符啊。

3.5 方法五-shell02-不推荐-没效率

#!/bin/bash
for((i=1;i<=5;i++))
do
   for((j=10;j<=90;j+=10))
   do
   middle=`printf %02d"$j"`
   num=$i$((middle+i-1))
   echo $num
   done
done
 
[[email protected] scripts]# sh  seq2.sh
110
120
130
140
150
160
170
180
190
211
221
231
241
251
261
271
281
291
312
322
332
342
352
362
372
382
392
413
423
433
443
453
463
473
483
493
514
524
534
544
554
564
574
584
594

最简单的思路,可是双层嵌套循环,没有效率。

第4章 总结

最核心的是算法,到底如何做。

一个循环,每十次自动加1.

难免有不足之处请大家指正谢谢。

时间: 2024-08-05 08:24:14

经典-输出规律的数字序列的相关文章

生成数字序列命令(7)

生成数字序列命令:seq,shuf 7.1.seq 功能:打印数字序列 语法:seq [OPTION]... LAST seq [OPTION]... FIRST LAST seq [OPTION]... FIRST INCREMENT LAST 常用选项: -f  使用printf样式格式 -s  指定分隔符,默认换行符\n -w  等宽,用0填充 示例: 数字序列: 方法1: [[email protected] ~]# seq 10 1 2 3 4 5 6 7 8 9 10 方法2: fo

求一组数字序列的分布情况(java)

最近需要做一个正态分布的函数图像所以要处理一段double序列 写了这个算法  先上效果图: 核心思想: 1先根据步长计算每一个区间 2循环进行判断序列中每个数属于哪个区间 3用一个数组来保存每一个区间中 数的个数 这样就可以得到整个分布函数了 当然效率值得考虑 我的机器1百万以上的数据就会有问题了 这是一个double类型的例子 int型就更容易啦 上代码! 1 package com.huang.distribution; 2 3 import java.math.BigDecimal; 4

codevs 2622 数字序列

2622 数字序列 提交地址:http://codevs.cn/problem/2622/ 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 给定一个长度为n的一个序列A1,A2,…,An,求序列中连续子序列的最大和. 例如:当输入为-5,3,5,7,-15,6,9,27,-36,10时,连续子序列6,9,27的和为42是最大值:而当序列变成-5,3,5,8,-15,6,9,27,-36,10时,连续子序列3,5,8,-15,6,9

[Jobdu] 题目1544:数字序列区间最小值

题目描述: 给定一个数字序列,查询任意给定区间内数字的最小值. 输入: 输入包含多组测试用例,每组测试用例的开头为一个整数n(1<=n<=100000),代表数字序列的长度.接下去一行给出n个数字,代表数字序列.数字在int范围内.下一行为一个整数t(1<=t<=10000),代表查询的次数.最后t行,每行给出一个查询,由两个整数表示l.r(1<=l<=r<=n). 输出: 对于每个查询,输出区间[l,r]内的最小值. 样例输入: 5 3 2 1 4 3 3 1

P1895 数字序列

题目背景 查找数字 题目描述 在下列的无穷数字序列1121231234123451234561234567123456781234567891234567 8910123456789101112345678910......中,查找第i个数字. 输入格式 第一行为正整数t(1≤t≤10),表示测试数据组数.接下来t行,每行一个正整数i(1≤i≤2^31-1). 输出格式 对于每一个i,输出对应位置上的数字. 输入输出样例 输入 #1 2 3 8 输出 #1 2 2 思路 预处理不必拆开每个数,只

剑指Offer对答如流系列 - 数字序列中某一位的数字

面试题44:数字序列中某一位的数字 题目描述 数字以0123456789101112131415-的格式序列化到一个字符序列中.在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等.请写一个函数求任意位对应的数字. 问题分析 这个寻求高效的解决方法,也是寻找规律: 个位数的个数一共有10个,即0~9,共占了10*1位数字:(特殊) 两位数的个数一共有90个,即10~99,每个数字占两位,共占了90*2位数字: -- m位数的个数一共有9*10^(m-1)个,每个数字占m位,

《剑指offer》第四十四题:数字序列中某一位的数字

// 面试题44:数字序列中某一位的数字 // 题目:数字以0123456789101112131415…的格式序列化到一个字符序列中.在这 // 个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等.请写一 // 个函数求任意位对应的数字. #include <iostream> #include <algorithm> using namespace std; int countOfIntegers(int digits); int digitAtIndex(

BZOJ 1049 数字序列(LIS)

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1049 题意:给出一个数列A,要求:(1)修改最少的数字使得数列严格递增:(2)在(1)的基础上使得修改的绝对值之和最小. 思路:对于第一问看起来像是求最长上升子 列,其实不是.我们想,若对于i<j,j能由i转移过来,那么需满足A[j]-A[i]>=j-i才行,这样我们发现只要A[j]-j& gt;=A[i]-i即可.因此令A[i]=A[i]-i,这样求LIS即可.对于第二问,

写一个程序输出1到100这些数字。但是遇到数字为3的倍数的时候,输出“三”替代数字,为5的倍数用“五”代替,既是3的倍数又是5的倍数则输出“三五”。

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 </head> 7 <body> 8 <script type="text/javascript"> 9 /*写一个程序输出1到100这些数字.