zoukankan      html  css  js  c++  java
  • 小题精炼-----初试C语言

                毫无疑问, 这个又是给新入门学C语言的小鲜肉准备的!

     

    题解:

    1. 直接两个循环就ok啦! 当初讲课的时候几乎讲过原题啦。

    2. 直接 100的三次方就是1000000啦, 所以直接对某数的三次方开方(取int型), 然后再平方, 判断一下是否相等。

    3. 可以直接扫描一下, 把大写字母都转化成小写, 然后逐个判断!

    4. 求组合数, 直接按照求组合数的公式, 然后循环求解, 就好啦!

    5. 直接循环求出 真因子和, 判断一下是否和原数相等否, 即可!(这个好像也讲过原题!)

    6.多重集的组合,这就是一个公式的事儿!  这个公式的推导过程也很机智!

    附加题: 仔细回想一下自己小学算除法的过程, 然后用一个数组保存余数。 用另一个数组判断同一个余数是否出现两次,当有一个余数出现两次时, 立刻停止往下除。 然后找出这两个余数出现的位置(加括号), 然后把各   余数*10 /除数  输出即可! 。 详见代码!   

     

    Talk is cheap, show me your code!

    各题代码:

    1.

     1 #include <iostream>
     2 #include <cstdio>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int ok;
     8     printf("%d
    ", 2);
     9     for(int i=3; i<=1000000; i++)
    10     {
    11         int ok = 1;
    12         for(int j=2; j*j<=i; j++)
    13         {
    14             if(i%j==0)
    15             {
    16                 ok = 0;
    17                 break;
    18             }
    19         }
    20         if(ok) printf("%d
    ", i);
    21     }
    22     return 0;
    23 }
    View Code

     

    #include<stdio.h>
    #include<math.h>
    const int maxn=10000000;
    int a[maxn];
    int main()
    {
        for(int i=2;i<maxn;i++)
        a[i]=i;
        for(int i=2;i<sqrt(maxn);i++) if(a[i]) {
            for(int j=i*i;j<maxn;j=j+i)
            a[j]=0;
        }
        for(int i=2;i<maxn;i++)
        if(a[i]!=0) printf("%8d",i);    
    } 
    View Code

     

    2.

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cmath>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     for(int i=1; i<=100; i++)
     9     {
    10         int q = sqrt(i*i*i*1.0);
    11         if(q*q==i*i*i) printf("%d
    ", i*i*i);
    12     }
    13     return 0;
    14 }
    View Code

     

    #include<cstdio>
    #include<cmath>
    int main()
    {
        for(int i=1;i<=100;i++){
            if(sqrt(i*i*i)*sqrt(i*i*i)==i*i*i);
            printf("%8d
    ",i*i*i);
        }
        return 0;
    }
    View Code

     

    3.

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 using namespace std;
     5 
     6 char str[10005];
     7 
     8 int main()
     9 {
    10     while(scanf("%s", str)!=EOF)
    11     {
    12         getchar();
    13         for(int i=0; str[i]!=''; i++)
    14         if(str[i]>='A'&&str[i]<='Z') str[i] += 32; 
    15         int len = 0;
    16         for(int i=0; str[i]!=''; i++)
    17         {
    18            if(str[i]!='#') len++;
    19             for(int j=i+1; str[j]!=''; j++)
    20                 if(str[i]==str[j]) str[j] = '#';
    21         }
    22         printf("%d
    ", len);
    23     }
    24     return 0;
    25 }
    View Code

     

    #include<cstdio>
    #include<cstring>
    const int maxn=1000000;
    char s[maxn];
    int main()
    {
        int a[26]={0};
        while(~scanf("%s",s))
        {
            int sum=0,len=strlen(s);
            for(int i=0;i<len;i++){
                
                if(a[s[i]-65]==1||a[s[i]-97]==1)
                continue;
                
                if(s[i]>=65&&s[i]<=90)
                a[s[i]-65]=1;
                
                if(s[i]>=97&&s[i]<=122)
                a[s[i]-97]=1;
            }
            for(int i=0;i<26;i++)
            if(a[i]) sum++;
            printf("%d
    ",sum);
        }
        return 0;
    } 
    View Code

    4.

     1 #include <iostream>
     2 #include <cstdio>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int ans;
     8     int n, m;
     9     while(scanf("%d%d", &n, &m)!=EOF)
    10     {
    11         ans = 1;
    12         if(m<n-m) m = n-m;
    13         for(int i=m+1; i<=n; i++)
    14             ans*=i;
    15         for(int i=1; i<=n-m; i++)
    16             ans/=i;
    17         printf("%d
    ", ans);
    18     }
    19     return 0;
    20 }
    View Code
    #include<cstdio>
    int comb(int n,int m)
    {
        if(m==0||n==m) 
        return 1;
        return comb(n-1,m)+comb(n-1,m-1);
    }
    int main()
    {
        int m,n;
        while(scanf("%d%d",&n,&m)!=EOF){
            printf("%d
    ",comb(n,m));
        }
        return 0;
    }
    View Code

     

    5.

     1 #include <iostream>
     2 #include <cstdio>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     for(int i=5; i<=1000000; i++)
     8     {
     9         int sum = 1;
    10         for(int j=2; j*j<=i; j++)
    11         {
    12             if(i%j==0) sum += j + i/j;
    13             if(j*j==i) sum-=j; 
    14         }
    15         if(sum==i) printf("%d
    ", i);
    16     }
    17     return 0;
    18 }
    View Code


     

    #include<cstdio>
    const int maxn=1000000;
    int main()
    {
        int s;
        for(int i=6;i<=maxn;i++){
            s=0;
            for(int j=1;j<i;j++){
                if(i%j==0)
                s+=j;
            }
            if(s==i) printf("%d
    ",s);
        }
        return 0;
    }
    View Code

    6.

     1 #include <iostream>
     2 #include <cstdio>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int ans=1;
     8     for(int i=10+1; i<=14; i++)
     9         ans*=i;
    10     for(int i=1; i<=14-10; i++)
    11         ans/=i;
    12     printf("%d
    ", ans);
    13     return 0;
    14 }
    View Code

     

    附加题:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 using namespace std;
     5 
     6 bool vis[2000];
     7 int ans[2000];
     8 
     9 int main()
    10 {
    11     int a, b;
    12     while(scanf("%d%d", &a, &b)!=EOF)
    13     {
    14         printf("%d", a/b);
    15         if(a%b==0) {printf("
    "); continue;}
    16         printf(".");
    17         int flag = -1; int k=0; 
    18         memset(vis, 0, sizeof(vis));
    19         a = a%b; vis[a] = 1; ans[k++] = a;
    20         while(a%b)
    21         {
    22             a *= 10;
    23             int temp = a%b;
    24             if(vis[temp])
    25             {
    26                 for(int i=0; i<k; i++)
    27                 {
    28                     if(temp==ans[i]) 
    29                     {
    30                         flag = i; break;
    31                     }
    32                 }
    33                 break;
    34             }
    35             else 
    36             {
    37                 ans[k++] = temp;
    38                 a = temp;
    39                 vis[temp] = 1;
    40             }
    41         }
    42         if(flag==-1)
    43         {
    44             for(int i=0; i<k-1; i++)
    45                 printf("%d", ans[i]*10/b);
    46         }
    47         else
    48         {
    49             if(flag==0) printf("(");
    50                 else
    51                 {
    52                     for(int i=0; i<flag; i++)
    53                     printf("%d", ans[i]*10/b);   
    54                     printf("(");
    55                 }
    56                 for(int i=flag; i<k; i++)
    57                 printf("%d", ans[i]*10/b);
    58                 printf(")");
    59         }
    60         printf("
    ");
    61     }
    62     return 0;
    63 }
    View Code

     

  • 相关阅读:
    jvisualm 结合 visualGC 进行jvm监控,并分析垃圾回收
    linux 查看服务器cpu 与内存配置
    arthas 使用总结
    selinux contexts 安全上下文的临时更改
    Android 8.1 Doze模式分析(五) Doze白名单及Debug方式
    Window 任意窗口置顶软件Window TopMost Control
    Android ApkToolPlus一个可视化的跨平台 apk 分析工具
    SVN Please execute the 'Cleanup' command.
    Android 如何在64位安卓系统中使用32位SO库
    Android cmd命令查看apk是32位还是64位?
  • 原文地址:https://www.cnblogs.com/acm1314/p/4837935.html
Copyright © 2011-2022 走看看