• 如何打印枚举子、递归栈、递归斐波拉契数列、爱恩斯坦阶梯、筛法求素数、统计单词


      一、如何打印枚举子,可以定义与枚举子对应的字符串指针,也可以使用switch语句

     1 #include <stdio.h>
     2 int main()
     3 {    
     4     /* 1.定义枚举类型 */
     5     enum type {INT,CHAR,DOUBLE};
     6     /* 2.定义与枚举子对应的字符串指针 */
     7     const char *TYPE[3] = {"INT","CHAR","DOUBLE"};
     8     /* 3.定义枚举变量并初始化 */
     9     enum type T = INT;
    10     /* 4.打印枚举子 */
    11     printf("%s\n",TYPE[T]);
    12     return 0;
    13 }
     1 #include <stdio.h>
     2 int main()
     3 {    
     4     /* 1.定义枚举类型 */
     5     enum type {INT,CHAR,DOUBLE};
     6     /* 2.定义枚举变量并初始化 */
     7     enum type T = INT;
     8     /* 3.打印枚举子 */
     9     switch(T){
    10         case INT:printf("INT");break;
    11         case CHAR:printf("CHAR");break;
    12         case DOUBLE:printf("DOUBLE");break;
    13     }
    14     return 0;
    15 }

      二、爱恩斯坦阶梯

     1 #include <stdio.h>
     2 int main()
     3 {
     4     int  x = 7, find = 0;
     5     while (!find)
     6     {
     7         if (x%2==1 && x%3==2 && x%5==4 && x%6==5 && x%7==0)
     8         {
     9                 printf("x = %d\n", x);
    10                 find = 1;   
    11         }
    12         x++;
    13     }
    14     return 0;
    15 }

      三、递归栈的理解(dev c++调式)

     1 #include <stdio.h>
     2 
     3 int a[100] = {3};
     4 void fun(int m,int k){
     5     int i,j;
     6     for(i=m; i>=k; i--){
     7         a[k] =  i;
     8         if(k>1)
     9             fun(i-1,k-1);
    10         else{
    11             for(j= a[0];j>0;--j)
    12                 printf("%d ",a[j]);
    13             printf("\n");
    14         }
    15     }
    16 }
    17 
    18 int main()
    19 {
    20     fun(5,3);
    21     return 0;
    22 }

    四、递归斐波那契数列

     1 # include <stdio.h>
     2 #include <string.h>
     3 # define N 100
     4 
     5 int fab[N];
     6 int Fab(int n)
     7 {
     8     if (fab[n]==-1)//防止溢出
     9     {
    10         if ((n==1)||(n==2))
    11             fab[n]=1;
    12         else
    13             fab[n]=Fab(n-1)+Fab(n-2);
    14     }
    15     return fab[n];
    16 }
    17 
    18 int main()
    19 {
    20     int n;    
    21     scanf("%d",&n);
    22     
    23     memset(fab,-1,N);//数组赋值-1
    24     printf("%d\n",Fab(n));
    25     
    26     for(int i=1; i<=n; ++i)
    27         printf("%d ",fab[i]);
    28     return 0;    
    29 }

    五、筛法求素数

    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    
    void shift(int *isPrime, int n, int i){
        for(int j=2*i; j<n; j+=i)
            isPrime[j] = 0; //划掉不是素数的数
    }
    int main()
    {
        int isPrime[100];
        //假定1~100都是素数
        memset(isPrime,1,100*sizeof(int)); //初始化数组所有元素为1
    
        //求素数
        for(int i=2; i<sqrt(100);++i)
        {
            if(isPrime[i]) shift(isPrime,100,i);
        }
    
        //输出素数
        for(int j=2; j<100; ++j)
            if(isPrime[j])
                printf("%d ", j);
    
        return 0;
    }

    六、统计单词

     1 #include <stdio.h>
     2 
     3 void CountWords(const char *a,int *b){
     4     int i=0,num=0,word=0; //为统计第一个单词,假定有空白符
     5     
     6     for(i=0; a[i]; i++){
     7         if(a[i]==' '||a[i]==',' || a[i]=='\n'){ //忽略空白符或其他符号
     8             word=0;
     9         }else if(word==0){ //出现空白符单词个数++
    10             word=1;
    11             num++;
    12         }    
    13     }
    14     //利用参数返回
    15     *b=num;
    16 }
    17 
    18 int main()
    19 {
    20     const char *a = "  Hello  , world  \n  haha   ";
    21     int count;  //主函数局部变量
    22     CountWords(a,&count); //取地址传递
    23     printf("%d\n",count);
    24     return 0;
    25 }

    七、若干人(100以内)围成一圈,数到3的人退出,计算坚持到最后的那个人的位置

    #include<stdio.h> 
    
    int main()
    { 
        int a[100]={0}; //初始化数组,所有元素都为0
        int n,i; //i 表示数组下标
        
        printf("请输入人数:"); 
        scanf("%d",&n);
    
        int cnt=0; //计数器初始化为0
        int count = n; //人数
        
        for (i=0; count>1; ++i,i%=n) //因为 i 每次累加后被 n 取余,所以累加不会超过 n
        {
            if(a[i]==0) //数组元素为0的表示有人,为-1的表示已经退出
            {
                cnt++;
            }
            if (cnt==3)
            {
                count--; //人数减 1      
                a[i]=-1; // 赋值为-1表示退出圈子
                cnt=0; //计数器归0
            }
        }
    
        for(i=0;i<n;i++)
        {
            if (a[i]==0)
                printf("The result is %d: ",i+1); //数组下标+1就是人的位置,没必要用数组元素的值表示位置
        }
        
        return 0;
    }

    八、随机产生1~10十个数字的序列,数字不能重复,然后,选择排序

    #include <stdio.h>
    #include <stdlib.h> //rand
    #include <time.h>
    int main()
    {
        srand((unsigned) time(NULL)); //随机数发生器
        int i,j,k,t;
        int n = 10;        //10个数字
        int arr[10] = {0}; //记录随机产生的数字序列
        int key[10] = {0}; //是否产生过数字的标记
        int index = 0;     //记录数字序列的下标
        int num = 0;       //随机产生的数字
        
        //随机产生10个1~10的数字序列
        while(index<n){        
            num = rand()%n; //num随机产生的数字 0~9
            if(!key[num]){  //num是否产生过
                arr[index++] = num + 1; //记录随机产生的数字
                key[num]++; //num产生后,标记
            }     
        }
        
        //随机序列
        for( i=0; i<n; ++i)
            printf("%d ",arr[i]);
        printf("\n");
        
        //选择排序
        for(i=0; i<n-1; ++i){
            k=i;
            for(j=i+1;j<n;++j)
            {
                if(arr[j]<arr[k])
                    k=j;//最小数下标
            }
            //交换
            t=arr[i];
            arr[i]=arr[k];
            arr[k]=t;
        }
        
        //排序结果
        for( j=0; j<n; ++j)
            printf("%d ",arr[j]);
        printf("\n");
        
        return 0;
    }

    九、简易摇号器,vc 6.0 ++ 设计图形界面

        int i,j;
        int x = GetDlgItemInt( IDC_EDIT1); /*选出人数*/
        int y = GetDlgItemInt( IDC_EDIT2); /*总人数*/
        
        srand((unsigned)time(NULL)); /*随机种子*/
        int *num = (int *)malloc(sizeof(int)*y); /*总人数的数组*/
        if(num ==NULL){
            exit(0);
        }
        for(i=0; i<y; ++i){  /*总人数从1开始到总人数为止*/
            num[i] = i+1;
        }
        for(j=0; j<y; ++j){  /*随机打乱数组*/
            int k,temp;
            k = rand()%y;
            temp = num[j];
            num[j] = num[k];
            num[k] = temp;
        }
        
        CString strShow =_T("");
        CString strTemp =_T("");
        
        for(i=0; i<x; i++) /*选择数组从下标0开始到x-1结束共x个数字*/
        {
            strTemp.Format("%d",num[i]);
            strShow+=strTemp+",";
        }
        SetDlgItemText(IDC_EDIT3,strShow);
        free(num);

  • 相关阅读:
    c++ 队列
    17:特殊类成员:函数指针5
    c++ deque 双端队列
    18:字符串-char型字符串
    c++ 16 this 和 继承 及继承机制中的构造函数 与 析构函数
    c++ string char* const char*
    c++ 小片段
    google protobuf 使用示例
    hibernate-cache
    hibernate-criteria查询(二)
  • 原文地址:https://www.cnblogs.com/GoldenEllipsis/p/9504160.html
Copyright © 2020-2023  润新知