数组作业整理

题目1:在一个字符串指定位置插入一个字符

#include <stdio.h>
#include <string.h>
int main()
{
  char str[20] ="hello world";
  char ptr[20];
  char a;
  int i;
  int num=0;
  printf("please input one\n");
  scanf("%c",&a);
  printf("please input position\n");
  scanf("%d",&num);
  for(i=0;str[i] !='\0';i++)//当i值增加时检测字符数组'\0'一般字符数组以'\0'结束
  {
    ptr[i]=str[i];//将str数组元素赋给ptr数组
  
  }
   ptr[num]=a;//将指定位置值改变成所要的字符
   for(i=num;ptr !='\0';i++)
   {
     ptr[i+1]=str[i];//从指定位置开始依次往后加元素完成数组的拼接
      
   
   }
   printf("%s\n",ptr);

}
题目2:在字符串的指定位置插入字符串

#include <stdio.h>
#include<string.h>

int main()
{
  char str[64] ={0},ptr[32] = {0};
  int num ,len_str, len_ptr,i;
  printf("please input:\n");
  scanf("%s%d%s",str,&num,ptr);//num从0开始

  len_str =strlen(str);//
  len_ptr=strlen(ptr);//检测输入字符串长度strlen不包括'\0'

  for(i=0;i<len_str -num ;i++)//将指定位置后面的元素往后移动,从最后一个元素往后移动len_ptr的位数
  {
    str[len_str - 1 -i + len_ptr]=str[len_str -1 -i];//,要移动的数的位置和移动后位置与2个字符串长度有关
  
  
  }
  strncpy(str +num ,ptr,len_ptr);//str作为以为数组首元素地址+num指向0+num位置的元素将ptr的元素从这个位置开始复制,复制ptr字符串长度的位数。
  printf("%s\n",str);

}

3.题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.

#include <stdio.h>
int main()
{
    
   int num,person;
   int k=0;//用来记1,2,3
   int flag[1000]={0};
   int i =0;//用来数人数
   printf("please input\n");
   scanf("%d",&num);
   person = num;;//因为人数一直变的,保存人数(一些需要后面参考的值可以先保存起来)
   while(person !=1)//结果只有一个人标记报3的人为1,其他人为0
   {
     i++;
     if(flag[i]==0)
     {
        k++;

     }
     if(k==3)
     {
       k=0;
       flag[i]=1;//报到3赋值1,注意k值在输出后一个3后继续计数
       person--;

     
       
      }

    if(i==num)
    {
      i=0;//将数组从flag[0]开始
    
    }
  
   
   }

    for(i=1;i<=num;i++)
   {
     if(flag[i]==0)
     {
       printf("the last one:%d\n",i);
           break;
     }
   
   }
  

}
第一轮 flag里面的值:00100(假设5个人)

第二轮  :10100

第三轮: 10101

第四轮 : 11101第4个人为最后一个

         

猜你喜欢

转载自blog.csdn.net/hujiaqi2018/article/details/81208523