整数算法

来源:互联网 发布:人工智能 中医 编辑:程序博客网 时间:2024/06/16 14:18

1. 题目:通过编程实现,统计1~n有多少个

提示:n通过参数传入

[plain] view plain copy
  1. #include <stdio.h>  
  2. void  num(int n)  
  3. {  
  4.     int count=0;  
  5.     int b;  
  6.     int i=0;  
  7.     int temp;  
  8.     for(i=0;i<=n;i++)  
  9.     {  
  10.         temp = i;  
  11.         while(temp)  
  12.     {  
  13.             b = temp % 10;  
  14.             temp = temp / 10;  
  15.         if(b == 9)  
  16.             {  
  17.            count++;  
  18.         }  
  19.     }  
  20.     }  
  21.     printf("含有9的个数为%d\n",count);  
  22. }  
  23. int main()  
  24. {  
  25.     int a;  
  26.     printf("请输入一个数:");  
  27.     scanf("%d",&a);  
  28.     num(a);  
  29.     return 0;  
  30. }  


 

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

提示:用数组完成

[plain] view plain copy
  1. #include <stdio.h>  
  2. int shu(int n)  
  3. {  
  4.     int a[20];  
  5.     int i=0;  
  6.     int count=0;  
  7.     int num=0;  
  8.     int mark;  
  9.     for(i=0;i<n;i++)  
  10.     {  
  11.         a[i] = i+1;  
  12.     }  
  13.     while(count != n-1)  
  14.     {  
  15.         for(i=0;i<n;i++)  
  16.         {  
  17.         if(a[i]==0)  
  18.         {  
  19.             continue;  
  20.         }  
  21.             num++;  
  22.         if(num == 3)  
  23.         {  
  24.             num = 0;  
  25.         a[i] = 0;  
  26.         count++;  
  27.         }  
  28.         }  
  29.      }  
  30.      for(i=0;i<n;i++)  
  31.      {  
  32.          if(a[i]==0)  
  33.      {  
  34.          continue;  
  35.      }  
  36.      mark = a[i];  
  37.      break;  
  38.      }  
  39.      printf("留下的是原来的%d号(号码是从1开始)\n",mark);  
  40.        
  41. }  
  42. int main()  
  43. {  
  44.     int n;  
  45.     printf("请输入人数(20人以内):");  
  46.     scanf("%d",&n);  
  47.     shu(n);  
  48.     return 0;  
  49. }  


 

3. 题目:输入5个数(含负数、小数)将它们按由小到大的顺序排列起来

提示:需要排数的数字通过参数传递进来,

例如:输入:./a.out  -1  2.1  -3  5  7 输出: -3 -1 2.1 5 7

[plain] view plain copy
  1. #include <stdio.h>  
  2. int paixu(double *b,int n)  
  3. {  
  4.     int i = 0,j = 0;  
  5.     for(i=0;i<n;i++)  
  6.     {  
  7.        for(j=i+1;j<n;j++)  
  8.        {  
  9.           if(*(b+i)>*(b+j))  
  10.       {  
  11.           int temp;  
  12.           temp = *(b+i);  
  13.           *(b+i) = *(b+j);  
  14.           *(b+j) = temp;  
  15.       }  
  16.        }  
  17.     }  
  18. }  
  19. int main()  
  20. {  
  21.     double a[20];  
  22.     int i=0;  
  23.     int j=0;  
  24.     char ch=0;  
  25.     printf("请输入要排序的数(20个以内):");  
  26.     while(ch!='\n')  
  27.     {  
  28.         scanf("%lf",a+i);  
  29.     i++;  
  30.     ch = getchar();  
  31.     }  
  32.     paixu(a,i);  
  33.     for(j=0;j<i;j++)  
  34.     {  
  35.         printf("%lf\t",a[j]);  
  36.     }  
  37.     printf("\n");  
  38.     return 0;  
  39. }  


 

4. 题目:100以内的素数,全部打印出来

[plain] view plain copy
  1. #include <stdio.h>  
  2. #include <math.h>  
  3. void  sushu(int n)  
  4. {  
  5.     int i=0,j=0;  
  6.     int temp=1;  
  7.     printf("1~%d中有素数:",n);  
  8.     for(i=3;i<=n;i++)  
  9.     {  
  10.         for(j=2;j<=sqrt(i);j++)  
  11.     {  
  12.         temp = i % j;  
  13.         if(temp == 0)  
  14.         {  
  15.            break;  
  16.         }  
  17.     }  
  18.     if(temp!=0)  
  19.     {  
  20.        printf("%d\t",i);  
  21.     }  
  22.     }  
  23.     printf("\n");  
  24. }  
  25. int main()  
  26. {  
  27.     int n;  
  28.     printf("请输入一个整数:");  
  29.     scanf("%d",&n);  
  30.     sushu(n);  
  31.     return 0;  
  32. }  

5. 题目一个数如果恰好等于它的因子之和,这个数被成为”完数”,例如:6=1+2+3.请编程找出1000以内的完数

[plain] view plain copy
  1. #include <stdio.h>  
  2. #include <string.h>  
  3. int wan(int num)  
  4. {  
  5.     int i=0,j=0;  
  6.     int a[100]={0};  
  7.     int n=0;  
  8.     int sum=0;  
  9.     printf("1~%d中完数有:",n);  
  10.     for(i=0;i<=num;i++)  
  11.     {  
  12.        for(j=1;j<i;j++)  
  13.        {  
  14.            if((i%j)==0)  
  15.        {  
  16.           a[n] = j;  
  17.           n++;  
  18.        }  
  19.        }  
  20.        for(j=0;j<n;j++)  
  21.        {  
  22.           sum+=a[j];  
  23.        }  
  24.        if(i==sum)  
  25.        {  
  26.           printf("%d\t",i);  
  27.        }  
  28.        n = 0;  
  29.        sum = 0;  
  30.        memset(a,0,sizeof(a));  
  31.     }  
  32.     printf("\n");  
  33. }  
  34. int main()  
  35. {  
  36.     int n;  
  37.     printf("请输入一个数:");  
  38.     scanf("%d",&n);  
  39.     wan(n);  
  40.     return 0;  
  41. }  
0 0
原创粉丝点击