#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    
//1,随机产生20个[10 , 50]的正整数存到数组中,并求数组中的所有元素最大值、最小值、平均值以及各元素之和。第二大值(不排序),指针实现.
//    int a[20] = {20};
//    int * p = a;
//    printf("原数组:\n");
//    for (int i = 0; i < 20; i++) {
//        *(p + i) = arc4random() % 41 + 10;
//        printf("%d\t",*(p + i));
//    }
//    int max = *p;
//    int min = *p;
//    int sum = *p;
//    int twoOfNumber = *p;
//    printf("\n");
//    for (int i = 0; i < 20; i++) {
//        if (*(p + i) > max) {
//            max = *(p + i);
//        }
//        if (*(p + i) < min) {
//            min = *(p + i);
//        }
//        sum += *(p + i);
//        }
//    for (int i = 0; i < 20; i++) {
//        if (max == *(p + i)) {
//            continue;
//        } else if (twoOfNumber < *(p + i)) {
//            twoOfNumber = *(p + i);
//        }
//    }
//        printf("最大值是%d,最小值是%d,各元素之和是%d,平均值是%d,第二大值是%d",max,min,sum,sum / 20,twoOfNumber);
    
    //2、输入10个整数,将其中最小的数与第一个数对换,把最大的数和最后一个数对换,指针实现
//    int array[10] = {0};
//    int * p = array;
//   int maxNumber = 0;
//    int minNumber = 0;
//    printf("请输入十个数:");
//    for (int i = 0 ; i < 10; i++) {
//        scanf("%d",&*(p + i));
//    }
//    for (int i = 1; i < 10; i++) {
//        if (*(p + minNumber) > *(p + i)) {
//            minNumber = i;
//        }
//        if (*(p + maxNumber) < *(p + i)) {
//            maxNumber = i;
//        }
//    }
//    int tem = *p;
//    *p = *(p + minNumber);
//    *(p + minNumber) = tem;
//    
//    int temp = *(p + 9);
//    *(p + 9) = *(p + maxNumber);
//    *(p + maxNumber) = temp;
//
//    for (int i = 0 ; i < 10; i++) {
//     printf("%d\t",*(p + i));
//    }
    
// 3,有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中, 插入之后依然有序。指针实现
    
//    int a[6] = {1,3,6,7,9};
//    int * p = a;
//    int i = 0, j = 0, x = 0;
//    printf("输入添加的数:");
//    scanf("%d", &x);
//    for(i=0; i<5; i++){
//        if(x < *(p + i))
//            break;
//    }
//    for(j=5;j>i;j--){
//        *(p + j) = *(p + j - 1);
//    }
//    *(p + j) = x;
//    printf("添加到第%d位\n",j + 1);
//    printf("新序列:");
//    for(int i=0; i<6; i++){
//        printf("%d\t",*(p + i));
//    }
//
    
    //4.编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,用空格来分隔单词。指针实现
//    char str[] = "I want to playing conmpuer games";
//    char * p = str;
//    unsigned long a = strlen(str);
//    printf("长度为%lu;\n",a);
//    
//    int x = 0, y =0, m = 0, max = 0;
//    for (int i = 0; i <= a; i++) {
//        if (*(p + i) == ' ') {
//            printf("%d\t",i);
//            x = i - y;
//            y = i + 1;
//            if (max < x) {
//                max = x;
//                m = i;
//            }
//        }
//        if (*(p + i) == '\0') {
//            x = i - y;
//            y = i + 1;
//            if (max < x) {
//                max = x;
//                m = i;
//            }
//        }
//    }
//    printf("max = %d,m = %d\n", max, m);
//    printf("最长单词是:");
//    for (int i = m - max; i < m; i++) {
//        char n = 0;
//        n = *(p + i);
//        printf("%c",n);
//    }
    
    //5,耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,最后留在圈子内的人就是出卖耶稣的叛徒。请找出它原来的序号,指针实现
    
//    int man[13] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
//    int * p = man;
//    int count = 13;
//    int c = 0;
//    while (count != 1) {
//    for (int i = 0; i < 13; i++) {
//        if (*(p + i) != 0){
//            c++;
//        }
//        if (c == 3) {
//            *(p + i) = 0;
//            c = 0;
//            count--;
//            }
//        }
//    }
//    for (int i = 0; i < 13; i++) {
//        if (*(p + i) != 0) {
//            printf("叛徒是:%d号", *(p + i));
//                break;
//            }
//        }

    //6,有一字符串,包含数字与字母,编程去除数字。1、要求在原字符串中操作2、使用指针处理。如原串:sdf32hfb32yr, 处理完原串变为sdfhfbyr
//    char a[] = "s1df32hfb3555yr";
//    char * p = a;
//    int count = 0;
//    unsigned long lenth = strlen(a);
//    printf("总长度是%lu\n",lenth);
//    for (int i = 0; i < lenth; i++) {
//        if (*(p + i) >= '0' && *(p + i) <= '9' ) {
//            for (int j = 0; j < lenth - i; j++) {
//                *(p + i + j) = *(p + i + j + 1);
//            }
//            i--;
//            count++;
//        }
//    }
//    printf("除去数字后是:");
//    for (int i = 0; i < lenth - count; i++) {
//        printf("%c",*(p + i));
//    }
    

    
    
    
    
    return 0;
}