ACM札记四

0x1互逆素数

若将某一素数的各位数字的顺序颠倒后得到的数仍是素数,则此素数称为可逆素数。

#include <stdio.h>
#include <math.h>
 
int getrnum(int num){
    int rnum=0;
    do{
        rnum *= 10;
        rnum = rnum + num%10;
    }while((num/=10)!=0);
    return rnum;
}
 
int sushu(int num){
    int i,k;
    k = (int)sqrt((double)num);
    for(i=2;i<=k;i++){
        if(num%i==0)
            break;
    }
    if(i<k)
        return 0;//返回值为0表示不为素数
    else
        return 1;
}
 
void keni(int num){
    int flag,rnum;
    flag = sushu(num);
    if(flag == 0)
        printf("no\n");
    else{
        rnum = getrnum(num);
        flag = sushu(rnum);
        if(flag == 0)
            printf("no\n");
        else
            printf("yes\n");
    }
}
 
int main(){
    int num,rnum;
    scanf("%d",&num);
    keni(num);
    getchar();
    return 0;
}
 

在不知道位数的情况下得到一个整数的逆序数。

int getrnum(int num){
    int rnum=0;
    do{
        rnum *= 10;
        rnum = rnum + num%10;
    }while((num/=10)!=0);
    return rnum;
}
 

判断某整数是否为素数。

//头文件<math.h>
int sushu(int num){
    int i,k;
    k = (int)sqrt((double)num);
    for(i=2;i<=k;i++){
        if(num%i==0)
            break;
    }
    if(i<k)
        return 0;//返回值为0表示不为素数
    else
        return 1;
}
 

0x2 求数字的各个位数的和

运用数组,可以取数字的每位数。

#include <iostream>
 
using namespace std;
 
int sum(int x)
{
    int i=0,s[8],sum=0;
    do
    {
        s[i++]=x%10;
    }
    while((x/=10)>0);
    for(;i>0;i--)
        sum+=s[i-1];
    return sum;
}
 
 
int main()
{
    int num;
    cin>>num;
    cout<<sum(num);
}
 

>

0x3数组交换

输入一个正整数n(1 <n≤10),再输入n 个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n 个数。

#include <iostream>
 
using namespace std;
 
int main()
{
    int i,n;
    int a[10];
    cout<<"Input n: ";
    cin>>n;
    cout<<"Input "<<n<<" integers: ";;
    for(i=0; i<n; i++)
    {
        cin>>a[i];
    }
    int s,p,j;
    s=a[0];
    p=0;
    for(j=1; j<n; j++)
    {
        if(s<a[j])
        {
            s=a[j];
            p=j;
        }
    }
    a[p]=a[n-1];
    a[n-1]=s;
    s=a[0];
    p=0;
    for(j=1; j<n; j++)
    {
        if(s>a[j])
        {
            s=a[j];
            p=j;
        }
    }
    a[p]=a[0];
    a[0]=s;
    cout<<"After swapped: ";
    for(i=0; i<n; i++)
    {
        cout<<a[i]<<" ";
    }
    return 0;
}
 

0x4同构数

同构数是其平方数的尾数等于该数自身的自然数,例如:25×25=625。从键盘输入一个不大于10000的自然数,判断其是否是同构数并按样例格式输出。

#include <iostream>
using namespace std;
int main()
{
    int a;
    cin>>a;
    int b=a*a-a;
    int c=a,d=b;
    while((c=c/10)!=0)
    {
        if(d%10!=0)
        {
            cout<<a<<" no,"<<a<<"*"<<a<<"="<<a*a;
            return 0;
        }
        d=d/10;
    }
    if(d%10!=0)
        cout<<a<<" no,"<<a<<"*"<<a<<"="<<a*a;
    else
        cout<<a<<" yes,"<<a<<"*"<<a<<"="<<a*a;
 
    return 0;
}
 

0x5奇数输出

将一个整数中的每一位上为奇数的数依次取出,构成一个新数并输出。高位仍在高位,低位仍在低位。

#include <iostream>
using namespace std;
void function(int x)
{
    if(x==0)
        return;
    function(x/10);
    if(x%2!=0&&x>0)
        cout<<x%10;
    else if(x%2!=0&&x<0)
        cout<<-x%10;
}
 
int main()
{
    int x;
    cin>>x;
    if(x>0)
        function(x);
    else
    {
        cout<<"-";
        function(x);
    }
}#include <iostream>
#include <cstring>
using namespace std;
 
int main()
{
    char s1[100],s2[10];
    int i,j,k,len1,len2,b[10];
    gets[s1];
    gets[s2];
    len1=strlen(s1);
    len2=strlen(s2);
    for(i=0,k=0; i<len1; i++)
    {
        for(j=0; j<len2; j++)
            if(s1[i+j]!=s2[j])  
                break;
        if(j>=len2)
            b[k++]=i+1;   //i从0开始计数的,所以位置是i+1
    }
    cout<<k<<endl;   //k为s2在s1中出现的次数
    for(i=0; i<k; i++)
        cout<<b[i]<<" ";   //返回s2在s1中的位置,可能有多个
    cout<<endl;
    return 0;
}
 

0x6 字符串查询

在一个字串s1中查找一子串s2,若存在则返回s1中s2的个数和位置。

#include <iostream>
#include <cstring>
using namespace std;
 
int main()
{
    char s1[100],s2[10];
    int i,j,k,len1,len2,b[10];
    gets[s1];
    gets[s2];
    len1=strlen(s1);
    len2=strlen(s2);
    for(i=0,k=0; i<len1; i++)
    {
        for(j=0; j<len2; j++)
            if(s1[i+j]!=s2[j])  
                break;
        if(j>=len2)
            b[k++]=i+1;   //i从0开始计数的,所以位置是i+1
    }
    cout<<k<<endl;   //k为s2在s1中出现的次数
    for(i=0; i<k; i++)
        cout<<b[i]<<" ";   //返回s2在s1中的位置,可能有多个
    cout<<endl;
    return 0;
}
 

0x7泰勒展开式

用exp(x)的泰勒级数前15项之和近似计算并输出exp(x)的值,实数x从键盘输入。级数表达式如下:

#include <iostream>
 
using namespace std;
 
int main()
{
    float result=1,u=1,x;
    int i=1;
    cin>>x;
    while(i<=14)
    {
        u=u*x/i;
        result=result+u;
        i++;
    }
    cout<<result;
}
 

0x8格式化输出

从键盘输入一个正整数,将该数乘2的积按3位一逗的格式输出。

#include <stdio.h>
#include <stdlib.h>
 
main()
{
    unsigned long n;
    int a[10],i;
    scanf("%ld",&n);
    n*=2;
    for(i=0; n>0; i++)
    {
        a[i]=n%1000;
        n/=1000;
    }
    for(i--; i>=0; i--)
        printf("%d%c",a[i],i!=0?',':' ');
}
 

0x9统计字符串数目

输入一行文字,统计其中的大写字母、小写字母、空格、数字以及其他字符的个数。

#include <iostream>
 
#include <cstdio>
 
using namespace std;
 
int main()
{
    char s[100],a;
    int i,b,c,d,e,f;
    i=0;
    b=0;
    c=0;
    d=0;
    e=0;
    f=0;
    cout<<"Input a string:";
    gets(s);
    while(s[i]!='\0')
    {
        a=s[i];
        if(a>='A'&&a<='Z')
               b=b+1;
        else if(a>='a'&&a<='z')
            c=c+1;
           else if(a==' ')
                d=d+1;
           else if(a>='1'&&a<='9')
                e=e+1;
            else
                f=f+1;
 
        i=i+1;
    }
    cout<<"Number of uppercase letters is :"<<b<<endl;
    cout<<"Number of lowercase letters is :"<<c<<endl;
    cout<<"Number of spacebars is :"<<d<<endl;
    cout<<"Number of digits is :"<<e<<endl;
    cout<<"Number of other characters is :"<<f<<endl;
}
 

0x9求和

输入2个正整数a和n,求a+aa+aaa+aa…a(n个a)之和。

#include <iostream>
 
using namespace std;
 
int main()
{
    int a,n,s=0;
    cout<<"Input a, n: ";
    cin>>a>>n;
    while(n>=0)
    {
        s=a*n+s;
        a=a*10;
        n--;
    }
    cout<<"s="<<s<< endl;
    return 0;
}
 

0x10最近素数

从键盘输入一个大于2的正整数n,求解并输出大小最接近n的素数(不包括n)。

#include <iostream>
#include <cmath>
 
using namespace std;
 
//判断素数
int isprime(int x)
{
    int i;
    if(x<2)
        return 0;
    for(i=2; i<sqrt(x); i++)
        if(x%i==0)
            return 0;
    return 1;
}
 
int main()
{
    int i,a,b,n;
    cin>>n;
    for(a=n+1; !isprime(a); a++); //不是素数就跳过,是素数就结束循环。
    for(b=n-1; !isprime(b); b--);
    if(a-n<n-b)
        cout<<a<<endl;
    else if(a-n==n-b)
        cout<<a<<" "<<b<<endl;
    else
        cout<<b<<endl;
    return 0;
}
 

除特别注明外,本站所有文章均为慕白博客原创,转载请注明出处来自https://geekmubai.com/code/acm/646.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏C语言及其他语言

【每日一题】问题 1157: 【亲和数】

古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为: 1+2+4+5+10+11+20+22+44+55+110=284...

7920
来自专栏赵俊的Java专栏

落单的数Ⅱ

14820
来自专栏数据结构与算法

latex数学公式

14130
来自专栏ACM小冰成长之路

NYOJ-417-死神来了

ACM模版 描述 ? 题解 典型的鸽巢定理,给定 1∼n 个数,如果取超过一半的数,则一定存在一个数是另一个数的倍数。这里具体需要注意的是,n 如果是奇数时,这...

24770
来自专栏佳爷的后花媛

java学习要点

作为一个程序员,在找工作的过程中,都会遇到笔试,而很多笔试里面都包括java,尤其是作为一个Android开发工程师,java是必备技能之一.所以为了笔试过程中...

37250
来自专栏chenjx85的技术专栏

leetcode-342-Power of Four

25140
来自专栏闻道于事

Java I/O流输入输出,序列化,NIO,NIO.2

29930
来自专栏数据结构与算法

P3385 【模板】负环

题目描述 暴力枚举/SPFA/Bellman-ford/奇怪的贪心/超神搜索 输入输出格式 输入格式: 第一行一个正整数T表示数据组数,对于每组数据: 第一行两...

32150
来自专栏我是攻城师

Apache Pig学习笔记之内置函数(三)

46040
来自专栏aCloudDeveloper

算法导论第六章堆排序(一)

现在来看, 堆的含义大概有两种,一种是数据结构,一种是在一些语言中所定义的“垃圾回收机制”,如Java,在书本上的开篇强调了这两者,并强调若非特殊说明,皆把堆看...

256100

扫码关注云+社区

领取腾讯云代金券