#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;
}