@Jayfeather
2018-06-24T14:16:30.000000Z
字数 3099
阅读 1016
算法题
明明的随机数
链接:https://www.luogu.org/problem/show?pid=P1059
// luogu-judger-enable-o2#include<stdio.h>void mergearry(int A[], int left, int right, int mid, int *p){int i = left, j = mid + 1, counter = 0, m = mid, n = right, *temp = p;while (j <= right && i <= mid){if (A[i] <= A[j]){p[counter] = A[i];i++;}else if (A[i] > A[j]){p[counter] = A[j];j++;}counter++;}while (i <= mid){temp[counter++] = A[i++];}while (j <= right){temp[counter++] = A[j++];}for (int n = 0; n < counter; n++){A[left + n] = p[n];}}void merge(int A[], int left, int right, int *p){int mid = (right + left) / 2;if ((right) == left)return;else{merge(A, left, mid, p);merge(A, mid + 1, right, p);mergearry(A, left, right, mid, p);}}void MergeSort(int A[], int num){int *p = new int[num];merge(A, 0, num - 1, p);delete[] p;}int main(){int num;scanf("%d", &num);int A[100005] = { 0 };int left = 0, right = num;for (int n = 0; n < num; n++){scanf("%d", &A[n]);}MergeSort(A, num);int a=0,b=1,c=1;while(b<num){if(A[a]!=A[b])c++;a++;b++;}a=0;b=0;printf("%d\n",c);printf("%d", A[0]);for (int n = 1; n < num; n++){if(A[n-1]!=A[n])printf(" %d", A[n]);}return 0;}
可以说是对之前的排序算法的一个复习
只是添加了一个统计和去重的内容
总体来说只要排序掌握好了不难
集合运算
链接:https://www.luogu.org/problemnew/show/T33632#sub
#include<stdio.h>void mergearry(int A[], int left, int right, int mid, int *p){int i = left, j = mid + 1, counter = 0, m = mid, n = right, *temp = p;while (j <= right && i <= mid){if (A[i] <= A[j]){p[counter] = A[i];i++;}else if (A[i] > A[j]){p[counter] = A[j];j++;}counter++;}while (i <= mid){temp[counter++] = A[i++];}while (j <= right){temp[counter++] = A[j++];}for (int n = 0; n < counter; n++){A[left + n] = p[n];}}void merge(int A[], int left, int right, int *p){int mid = (right + left) / 2;if ((right) == left)return;else{merge(A, left, mid, p);merge(A, mid + 1, right, p);mergearry(A, left, right, mid, p);}}void MergeSort(int A[], int num){int *p = new int[num];merge(A, 0, num - 1, p);//delete[] p;}int main(){int A[1000], B[1000], num1, num2, n1=0,n2=0,counter=0;scanf("%d", &num1);for (int n = 0; n < num1; n++){scanf("%d", &A[n]);}scanf("%d", &num2);for (int n = 0; n < num2; n++){scanf("%d", &B[n]);}MergeSort(A, num1);MergeSort(B, num2);while (n1 < num1 || n2 < num2){if (n1 < num1&&n2 < num2){if (A[n1] < B[n2]){n1++;}else if (A[n1] > B[n2]){n2++;}else if (A[n1] == B[n2]){printf("%d ", A[n1]);n1++;n2++;counter++;}}else if (n1 >= num1){n2++;}else if (n2 >= num2){n1++;}}if(counter!=0)putchar('\n');n1 = 0; n2 = 0;while (n1 < num1 || n2 < num2){if (n1 < num1&&n2 < num2){if (A[n1] < B[n2]){printf("%d ", A[n1]);n1++;}else if (A[n1] > B[n2]){printf("%d ", B[n2]);n2++;}else if (A[n1] == B[n2]){printf("%d ", A[n1]);n1++;n2++;}}else if (n1 >= num1){printf("%d ", B[n2]);n2++;}else if (n2 >= num2){printf("%d ", A[n1]);n1++;}}n1 = 0; n2 = 0;putchar('\n');while (n1 < num1 || n2 < num2){if (n1 < num1&&n2 < num2){if (A[n1] < B[n2]){printf("%d ", A[n1]);n1++;}else if (A[n1] > B[n2]){n2++;}else if (A[n1] == B[n2]){n1++;n2++;}}else if (n1 >= num1){n2++;}else if (n2 >= num2){printf("%d ", A[n1]);n1++;}}return 0;}
小测题目之一
(可以看出来我的排序用的和上面的是一样的……)
(稍微有些偷懒,不过问题不大~)
(能AC就行)
查找元音
链接:https://www.luogu.org/problemnew/show/T32601#sub
// luogu-judger-enable-o2#include<stdio.h>int main(){char chars[100000000];int n = -1, x = 0;scanf("%s", chars);while (chars[x] != '\0'){if (chars[x] == 'a' || chars[x] == 'e' || chars[x] == 'i' || chars[x] == 'o' || chars[x] == 'u' ||chars[x] == 'A' || chars[x] == 'E' || chars[x] == 'I' || chars[x] == 'O' || chars[x] == 'U'){printf("%d", x + 1);n++;break;}x++;}if (n == -1)printf("0");return 0;}
很简单的签到题……不赘述了……