seo网站页面优化包含,如何建设机器人教育网站,汕头住房与城乡建设网站,计算机专业里面哪个专业最好两天没有更新了#xff0c;贴纸们#xff0c;有没有想我呀。#x1f604;#x1f604;#x1f604; 好了#xff0c;就寒暄到这里吧#xff0c;下面请看题#xff1a; 有序序列判断
输入一个整数序列#xff0c;判断是否是有序序列#xff0c;有序#xff0c;指序列… 两天没有更新了贴纸们有没有想我呀。 好了就寒暄到这里吧下面请看题 有序序列判断
输入一个整数序列判断是否是有序序列有序指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序
输入描述
第一行输入一个整数N(3≤N≤50)。
第二行输入N个整数用空格分隔N个整数。
输出描述
输出为一行如果序列有序输出sorted否则输出unsorted。
判断是否为有序序列可能是升序还可能是降序所以我们就可以设计一个函数来判断是不是有序序列那么我们怎么实现呢首先我们假设是升序的那么我们就以这个条件进去然后以某一个值为有序状态然后我们再里面进行判断如果有相反情况那么我们就改变刚才假设有序状态的值改为无序状态。之后我们再在主函数中根据返回的值进行判断有序还是无序
int sort(int arr[], int n)
{if (arr[0] arr[1]){int flag 0;//假设flag为0的时候为有序状态for (int j 0; j n - 1; j){if (arr[j] arr[j 1]){flag 1;//因为我们前面假设的是升序这里前一位大于后一位的话就不是有序 // 状态了那么此时我们就变为无序状态}}return flag;}else {int flag 0;for (int j 0; j n - 1; j){if (arr[j] arr[j 1]){flag 1;}}return flag;}
}
主函数里我们就很好写了
int sort(int arr[], int n)
{if (arr[0] arr[1]){int flag 0;for (int j 0; j n - 1; j){if (arr[j] arr[j 1]){flag 1;}}return flag;}else {int flag 0;for (int j 0; j n - 1; j){if (arr[j] arr[j 1]){flag 1;}}return flag;}
}int main()
{int n 0;scanf(%d, n);int arr[50];for (int i 0; i n; i){scanf(%d,arr[i]);}int ret sort(arr, n);//根据返回的值进行判断是否有序if (ret 1){printf(unsorted);}else{printf(sorted);}return 0;
}
我们来看看运行结果 有序序列插入一个整数
有一个有序数字序列从小到大排序将一个新输入的数插入到序列中保证插入新数后序列仍然是升序。
输入描述
第一行输入一个整数N(0≤N≤50)。 第二行输入N个升序排列的整数输入用空格分隔的N个整数。 第三行输入想要进行插入的一个整数。
输出描述
输出为一行N1个有序排列的整数。
插入一个数到升序序列中而且保证插入后还是一个升序序列怎么想这道题呢这里的要求是插入一个数那么我们一个数有一个数的做法有一些是两个有序序列进行排序那么我们很容易想到用这个数字与这个序列进行比较如果小于这个数那么我们就打印我们的原序列的数如果大于我们这个数那我们此时就是打印我们的目标数那么现在我们就以这个思路去实现我们的代码
int main()
{int n 0;scanf(%d, n);int arr[50];for (int i 0; i n; i){scanf(%d, arr[i]);}int num 0;scanf(%d, num);for (int i 0; i n; i){if (arr[i] num){printf(%d , arr[i]);}else{printf(%d , num);} }return 0;
}此时我们来看看运行的结果 我们根据运行的结果可以看出当我们找到插入数的位置后我们之后的数都是打印的是我们的插入的那个数。那么此时我们可以想那当我们的插入数插到属于它自己的位置时此时我们就不回去循环了。我们可以重新写一个循环呀打印原序列后面的数不就好了嘛我们打印完后我们就跳出整个循环
int main()
{int n 0;scanf(%d, n);int arr[50];for (int i 0; i n; i){scanf(%d, arr[i]);}int num 0;scanf(%d, num);for (int i 0; i n 1; i)//因为我们插入了一个数所以多了一次循环{if (arr[i] num){printf(%d , arr[i]);}else{printf(%d , num);//因为是插入一个所以我们就打印之后的序列的数就好了。for (int j i; j n; j){printf(%d , arr[j]);}break;//打印完后跳出整个循环就over了!}}return 0;
} 我们来看看此时的运行结果 序列中删除指定数字
有一个整数序列可能有重复的整数现删除指定的某一个整数输出删除指定数字之后的序列序列中未被删除数字的前后位置没有发生改变。
输入描述
第一行输入一个整数(0≤N≤50)。
第二行输入N个整数输入用空格分隔的N个整数。
第三行输入想要进行删除的一个整数。
输出描述
输出为一行删除指定数字之后的序列。
序列中删除指定的数字而且可能序列中有相同的整数那么也可能是相邻的相同的数。那么我们还是要与序列中的数进行比较如果不相同的话那么我们就打印出序列中的数。如果相同的话我们就删除序列中的数
int main()
{int n 0;scanf(%d, n);int arr[50];for (int i 0; i n; i){scanf(%d, arr[i]);}int num 0;scanf(%d, num);for (int i 0; i n; i){if (arr[i] num || arr[i]num){printf(%d , arr[i]);} else{}}return 0;
}
此时我们的问题是怎样删除我们的数那我们可以由后面一位数来替代该位需要删除的数
arr[i] arr[i 1];
而且还要注意可能有相邻的相同的数那么我们在序列中的数与该数相同时我们是不是还应该弄一个循环判断是否有相邻的相同数直到不相等了我们才跳出去
while (arr[i] arr[i 1])
{arr[i] arr[i 1];i;
}
我们来看看整体的代码
int main()
{int n 0;scanf(%d, n);int arr[50];for (int i 0; i n; i){scanf(%d, arr[i]);}int num 0;scanf(%d, num);for (int i 0; i n; i){if (arr[i] num || arr[i]num){printf(%d , arr[i]);} else{while (arr[i] arr[i 1]){arr[i] arr[i 1];i;}}}return 0;
}
我们来看看运行的结果 我们来梳理一下该过程假设序列不等于要删除的数我们就直接打印该序列中的数就可以了如果等于该序列的数我们先判断有没有相邻的相同的数如果没有那么我们就不用执行这一位就不用打印就直接跳到上面for循环给i跳到下一位进行判断如果有相邻相同的我们就进入while循环把后一位的值赋值给前一位然后i,直到不相等为止假设我们有两位相邻的那么我们的while循环就执行了一次i就加了一次然后到上面for循环处还要加一次总共加了我们的两次就是跳过我们的这两位咯你懂了吗?学会了还是学废了哈哈如果还是不太懂的话可以自己去调试哦 序列中整数去重
输入n个整数的序列要求对这个序列进行去重操作。所谓去重是指对这个序列中每个重复出现的整数只保留该数第一次出现的位置删除其余位置。
输入描述
输入包含两行第一行包含一个正整数n1 ≤ n ≤ 1000表示第二行序列中数字的个数第二行包含n个整数范围1~5000用空格分隔。
输入描述
输出为一行按照输入的顺序输出去重之后的数字用空格分隔。
序列中整数的去重且保留该数第一次出现的位置。哇这题是一道比一道变态啊
既然序列中的每一个元素都要去看的话那么我们就拿出第一位去和后面的每一位进行比较看看后面有没有如果有那么我们就删除或者向上面那样的跳过第一位比较完后我们接着要拿出第二位去与后面的进行比较了既然怎样的话那么我们还是可以写出下面的代码的
int main()
{int n 0;scanf(%d, n);int arr[1000];for (int i 0; i n; i){scanf(%d, arr[i]);}for (int i 0; i n; i){for (int j i1; j n; j){if (arr[i] arr[j]){//待思考的内容}}}return 0;
}
既然它要删除的话那就是我们的跳过或者移位如果跳过的话那么我们再双重循环里面又该怎样打印那么我们就先选择一位看看把后面的那一位移到这一位来就把后面的整体像前面移一位。移动完后我们再接着从后面一位进行排查如果还有我们又接着移直到排查完毕这个思路好像可以勒哈。那么我们移动一整次是不是我们的n就要减少一次呢因为我们移动了之后就会减少一位嘛所以n应该减减。但是我们此时还要注意一个问题我们的j也应该减减因为再我们下一次判断下一位时是从删除那位的位置开始排查着走的因为我们到上面for循环去的话j还要加加所以我们这里j还要减减
int main()
{int n 0;scanf(%d, n);int arr[1000];for (int i 0; i n; i){scanf(%d, arr[i]);}for (int i 0; i n; i){for (int j i1; j n; j){if (arr[i] arr[j]){for (int a j; a n - 1; a){arr[a] arr[a 1];}n--;j--;}}}for (int i 0; i n; i){printf(%d , arr[i]);}return 0;
}
我们来看看运行结果 今天就到这里了拜拜了好梦