namespace _018_数组练习
{
internal class Program
{
static void Main(string[] args)
{
//下列代码 是让用户 输入一串数字,电脑会把它当作一个字符串来保存,我们通过两次转换,和一次遍历
//,来把它保存成一个 整数数组 即 int数组.
string str = Console.ReadLine();//得到用户的输入,生成一个字符串
string[] strArray = str.Split(" ");//把字符串用空格分隔,并重新保存为一个字符串数组.
//下列代码意在 把 字符串数组 转换成 整数 int 形式的数组.
int[] intArray= new int[strArray.Length]; // 先声明一个和 上面字符串数组 长度一样的 int数组.
for(int i=0;i< strArray.Length;i++) // 遍历字符串数组的每一个下标
{
int number = Convert.ToInt32(strArray[i]);//把每一个遍历的下标里面的值,转换成 int 形式
intArray[i] = number;// 把 每个 整数 的值 装到 ,整数数组里面(int 数组)
}
int x = Convert.ToInt32(Console.ReadLine());// 再让用户输入一个 整数.我们把它声明为 X
//int m = 0;// x 要插入上面的数组,要找到一个最接近它且比它小的数.我们把它声明为 m
int m = intArray.Length - 1;//也可以直接定义m 为原来数组的最大值.这样如果x是最大的,我们也可以找到m的位置.
//bool find = false;//定义个一个 布尔 变量 来确认 是否可以找到M...或者说 是否可以找到满足条件的索引.
//条件 为 M <= x <= M+1
for (int i=0; i< intArray.Length-1;i++)//遍历整个整数数组,因为i每次都会自增,所以遍历时要减一位.不然就遍历过头了
{
if(x >= intArray[i] && x <= intArray[i+1])//找到比用户输入的X 要小的那一个数.x <= intArray[i+1] 这个感觉可以省略掉
{
m = i;//把 这个值赋值给 M
//find= true;//确认 已经找到 M 的值,返回 真 true.
break;// 到这里就可以跳出循环了.
}
}
//下面我们要新建一个数组,把m前的数值 x 和m 之后的数值 都放进去.这个新数组比原来多了一个数,引索+1即可.
int[] intArrayNew = new int[intArray.Length + 1];
// 先把原来数组0-m (包括M)的值 放到,新数组里面,还是使用for循环来进行遍历.
for(int i = 0; i <=(m); i++)
{
intArrayNew[i] = intArray[i];
}
//然后把 X 也插入新数组.
intArrayNew[m + 1] = x;
//在把 m 之后的数值 放到 新数组里面.
for(int i =m+1;i< intArray.Length;i++)
{
intArrayNew[i + 1] = intArray[i];
}
//输入这个新的数组---使用 foreach
foreach(int temp in intArrayNew)
{
Console.WriteLine(temp);
}
}
}
}