CCF题目

对于任意给定的一个正整数,计算其因数个数。
输入样例:
6
输出样例:
4
说明:
1、2、3、6都是6的因数。因此,输出4。

#include<stdio.h>
#include<math.h>
int main(void){
    int a;
    scanf("%d",&a);
    int i,s=0;
    for(i=1;i<=sqrt(a);i++){
        if(a%i==0){
            if(i==sqrt(a))
                s+=1;
            else
                s+=2;
        }
    }
    printf("%d",s);
    return 0;
}

在传递信息的过程中,为了加密,有时需要按一定规则将文本转换成密文发送出去。有一种加密规则是这样的:
1. 对于字母字符,将其转换成其后的第3个字母。例如:A→D,a→d,X→A,x→a;
2. 对于非字母字符,保持不变。

#include<stdio.h>
#include<string.h>
int main(void){
    char m[100]={0};
    scanf("%s",m);
    int i;
    for(i=0;i<sizeof(m)-1;i++){
        if(m[i]>='a'&&m[i]<='z'){    //小写字母a-z 97-122
            m[i] = m[i]+3;
            if(m[i]/122!=0){
                m[i]=96+m[i]%122;
            }
            printf("%c",m[i]);
        }
        else if(m[i]>='A'&&m[i]<='Z'){ //大写字母A-Z 65-90
            m[i] = m[i]+3;if(m[i]/90!=0){
                m[i]=64+m[i]%90;
            }
            printf("%c",m[i]);
        }
        else
            printf("%c",m[i]);
    }
    
    return 0;
}

角谷猜想又称冰雹猜想。它首先流传于美国,不久传到欧洲,后来由一位叫角谷的日本人带到亚洲。因为被称为角谷猜想。
通俗地讲,角谷猜想的内容是这样的:任意给定一个自然数n,当n是偶数时,将它除以2,即将它变成n/2;当n是奇数时,就将它变成3n+1,……,若干步后,总会得到1。
在上述演变过程中,将每一次出现的数字排列起来,就会出现一个数字序列。
我们现在要解决的问题是:对于给定的n,求出数字序列中第一次出现1的位置。

#include<stdio.h>
int main(void){
      long n;
    int i=1;
    scanf("%d",&n);
    while(n!=1){
        if(n%2==0)
            n/=2;
        else
            n=3*n+1;
        i++;
    }
    printf("%d",i);
    return 0;
}

将任意给定的整百元钞票,兑换成10元、20元、50元小钞票形式。输出兑换方案总数。

#include<stdio.h>
int main(void){
    int n,i,j,k,s=1;
    scanf("%d",&n);
    int t = n/10;
    s=s+t/2+t/5;  //(10)(10,20)(10,50)
    i=j=k=1;
    while(1){                         //(10,20,50)(20,50)找规律得到
        k = (n-50*i-20*j)/10;
        if(k>0){
            if(k%2==0)s+=k/2+1;
            else s+=(k-1)/2+1;
            i++;
            j=1;
        }else 
            break;
    
    }
    printf("%d",s);
    
    
    return 0;
}

模拟将任意给定的正整数n转换成对应的二进制数的过程:对于输入的任意正整数n,输出若干行“shang:* yu:*”的形式,表示其转换过程。

#include<stdio.h>
int main(void){
    int n;
    scanf("%d",&n);
    while(n!=0){
        printf("shang:%d yu:%d\n",n/2,n%2);
        n=n/2;
    }
    
    
    
    return 0;
}
输入:13
shang:6 yu:1
shang:3 yu:0
shang:1 yu:1
shang:0 yu:1
二进制就是1101

输入两个正整数,表示a和b(2≤a, b≤10 18)。如果a包含了b的所有质数因子,则输出“Yes”,否则输出“No”

#include<stdio.h>
int main(void){
    long long a,b,m;
    scanf("%lld",&a);
    scanf("%lld",&b);
    if(a==b){              //如果两数相等,直接输出“Yes”
        printf("Yes\n");
        return 0;
    }
    int x=a,y=b;
    while(x%y!=0){           //辗转相除法求最大公约数
        m=x;
        x=y;
        y=m%y;
        
    }
   
    if(y!=1 && a%(b/y)==0)    //如果a包含了b的所有质数因子,那么最大公约数不为1,而且a mod (b/GCD)=0
        printf("Yes\n");
    else
        printf("No\n");
    
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/zuoxiaojinglala/p/12462386.html