c语言指针题(2)

来源:互联网 发布:淘宝卖家怎么投诉评价 编辑:程序博客网 时间:2024/05/16 17:24

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

  每一个人对应两类数据:一个是存在或淘汰的状态,另一个是报数的值。但是利用数组只能表达一个对应的值,幸运的是可以将报数的值与人的报数顺序(通过%)一起循环,间接实现一一对应。
#include <stdio.h>#define N 5               //人数void  main(){    int a[N] = {0}, i = 0, out_n = 0, call_n = 0, *p;    p = a;    while (1)  {          //循环报数      if(*p == 0)  {    //如果健在        if (out_n == (N - 1))  break; //如果仅剩一人        call_n++;         //报数        call_n %= 3;      //最大为3,到了3就从0开始        if(call_n == 0) {*p = 1; out_n++;} //为0(即3)出局      }      p++;    if (p == a + N)  p = a;  //循环转向下一人    }    printf("最后剩余者的编号是:%d\n", p + 1 - a);}//------------------完

输入一个字符串,内有数字和非数字字符,将其中连续的数字作为一个整数依次存放到一数组中,统计共有多少个整数,并输出这些数
  本题的难点在于1.将字符串转化为整数2.定位数字
#include<stdio.h>int main(){    char c[20],*p=c;    int a[10],*q=a,num=0,i;    gets(c);    for(;*p!='\0';p++)        if(*p>='0'&&*p<='9')    {        *q=(*p)-'0';        p++;        while(*p>='0'&&*p<='9')        *q=(*q)*10+(*(p++)-'0');        num+=1;        q+=1;    }    for(i=0,q=a;i<num;i++,q++)        printf("%d\n",*q);    printf("\n");    printf("%d",num);    return 0;}

  解决方法:1.字符串类型-‘0’ 即得到对应的整数类型
                      2.当遇到首个数字字符进入循环,将连续的数字字符转化为整数
原创粉丝点击