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

     

  • 相关阅读:
    [CQOI2011]放棋子
    [CF1192B]动态直径
    [CERC2016]凸轮廓线
    19_08_14-19_08_21校内训练 补题
    [模板]线性递推+BM
    19_08_10[校内训练]割图
    [模板]多项式封装(无讲解)
    19_07_11校内训练[字串染色]
    CF990G
    19_07_09校内训练[分组]
  • 原文地址:https://www.cnblogs.com/acm1314/p/4837935.html
Copyright © 2011-2022 走看看