看了两遍,第二遍边看边做,变想,一行代码一行代码的尝试理解,这才基本理解了。把自己整理了三个小时的笔记分享出来希望可以帮到像我一样的新手,不尽不实之处还望老师和学长指正!
看了两遍,第二遍边看边做,变想,一行代码一行代码的尝试理解,这才基本理解了。把自己整理了三个小时的笔记分享出来希望可以帮到像我一样的新手,不尽不实之处还望老师和学长指正!
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);
}
}
}
}
索引i<=x<=i+1;
只判断小于的情况代码要更简洁xie
//从小到大的数组插入一个数排序
string str = Console.ReadLine();
string[] strArray = str.Split(" ");
int[] intArray = new int[strArray.Length];
for (int i = 0; i < strArray.Length; i++)
{
int number = Convert.ToInt32(strArray[i]);
intArray[i] = number;
}
int x = Convert.ToInt32(Console.ReadLine());
int xIndex = 0;
for (int i = 0; i < intArray.Length; i++)
{
if (intArray[i] >= x)
{
xIndex = i;
break;
}
else
{
xIndex = intArray.Length;
}
}
int[] newIntArray = new int[intArray.Length + 1];
for (int i = 0; i < newIntArray.Length; i++)
{
if (i < xIndex)
{
newIntArray[i] = intArray[i];
}
else if (i == xIndex)
{
newIntArray[i] = x;
}
else
{
newIntArray[i] = intArray[i - 1]; //1 3 4 5
}
}
foreach (int t in newIntArray)
{
Console.Write(t + " ");
}
static void test10()
{
Console.WriteLine("请输入一个有序的数组:");
string str = Console.ReadLine();
string[] strArray = str.Split(' ');
int[] intArray = new int[strArray.Length];
for (int i = 0; i < strArray.Length; i++)
{
int num = Convert.ToInt32(strArray[i]);
intArray[i] = num;
}
Console.WriteLine("请输入一个整数:");
int n = Convert.ToInt32(Console.ReadLine());
int m = intArray.Length-1;
//bool find = false;//默认是未找到索引位置 m<=x<=x+1
for (int i = 0; i < intArray.Length-1; i++)
{
if (n>=intArray[i]&&n<=intArray[i+1])
{
m = i;
//find = true;
break;
}
}
if (n<intArray[0])
{
m = -1;
}
int[] intArray1 = new int[intArray.Length + 1];
for (int i = 0; i < m+1; i++)
{
intArray1[i] = intArray[i];
}
intArray1[m + 1] = n;
for (int i = m+1; i < intArray.Length; i++)
{
intArray1[i+1] = intArray[i];
}
foreach (int temp in intArray1)
{
Console.Write(temp+" ");
}
//if (find==false)
//{
// m = intArray.Length - 1;
//}
}
Console.ReadLine(); 键盘输入
第九十课 编程题-插入
1. 输入(n<=10)个整数,已经按照从小到大顺序排列好,现另外给出一个整数X,请将整数X插入序列中,并使新的序列仍有序排列。
还没做出来。。。。。。没想出来怎么插入到序列里,再容朕想想。
string a = Console.ReadLine();
string b = Console.ReadLine();
string[] c = a.Split(" ");
string[] d = b.Split(" ");
int[] e = new int[c.Length];
int[] w = new int[d.Length];
int j = 0;
for(int f = 0; f < c.Length; f++)
{
int g =Convert.ToInt32(c[f]);
e[f] = g;
}
for(int h = 0; h < d.Length; h++)
{
int z = Convert.ToInt32(d[h]);
w[h] = z;
}
for(int i=0;i<e.Length;i++)
{
if(e[i] > w[0])
{
j = i;
break;
}
}
for (int k = 0; k <= j - 1; k++)
{
Console.Write(e[k] + " ");
}
Console.Write(w[0] + " ");
for (int l = j; l < e.Length; l++)
{
Console.Write(e[l] + " ");
}
思路:
①先将字符串转换为以空格划分的字符串组
②再将字符串组中的字符分别转换为数字组
③接下来将数字组中的每个数字分别与输入的那一个数字比较,比较后就看你自己怎么设定if语句中的条件了
④然后利用数字组中每个数字的索引分段输出,你所输入的单独的那个数字也随着插入输出就可以了。
憋了我好几天,学编程真得有个好脑子,头发可能就不需要了。等我脑子清凉点再来听老师怎么将。
听完老师的讲解,我弄明白了这道题,但我的思路还是很难清晰的跟上老师的讲解速度,看来得多听几次了。
老师可以纠正,我们的写法比较死,有些方法不熟
string a = Convert.ToString(Console.ReadLine());
string[] b = a.Split(" ");
int[] d = new int[b.Length];
for (int i = 0; i < b.Length; i++)
{
d[i] = Convert.ToInt32(b[i]);
}
for (int x = 0; x < d.Length; x++)
{
int suouin = x;
int NEW = d[x];
for (int i = x + 1; i < d.Length; i++)
{
if (NEW > d[i])
{
NEW = d[i];
suouin = i;
}
}
int linfgs = d[x];
d[x] = d[suouin];
d[suouin] = linfgs;
}
foreach (int f in d)
{
Console.Write(f + ",");
}
int[] xing = new int[(d.Length )+ 1];
Console.WriteLine(xing.Length);
Console.WriteLine("请再输入一个数");
int y = Convert.ToInt32(Console.ReadLine());
int[] z = new int[d.Length + 1];
int ysuoy = z.Length - 1;
for(int i = 0; i < d.Length; i++)
{
if (y <= d[i])
{
ysuoy = i;
break;
}
}
for(int i = 0; i < z.Length; i++)
{
if (i < ysuoy)
{
z[i] = d[i];
}else if (i == ysuoy)
{
z[i] = y;
}
else
{
z[i ] = d[i-1];
}
}
foreach(int f in z)
{
Console.Write(f + "/");
}