《算法竞赛入门经典》第一章精选

例1-2 三位数反转

  题目:程序每次读入一个正三位数,然后输出逆序的数字。注意,当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7;输入740,输出应该是47。

  分析:用%10可以得到个位数,用/10%10可以得到十位数,用/100可以得到百位数。

  输入样例:

  123

  输出样例:
  321

  源码

#include<stdio.h>

int main()
{
    int n,a,b,c;
    scanf("%d",&n);
    a=n/100;    //原百位
    b=n/10%10;  //原十位
    c=n%10;     //原个位
    printf("%d",c*100+b*10+a);
    return 0;
}

  另一种:

#include<stdio.h>

int main()
{
    int n;
    scanf("%d",&n);
    if(n%100==0)            //末尾两个0
        printf("%d",n/100);
    else if(n%10==0)        //末尾一个0
        printf("%d%d",n/10%10,n/100);
    else
        printf("%d%d%d",n%10,n/10%10,n/100);
    return 0;
}

例1-3 不借助第三者交换变量

#include<stdio.h>

int exchange_2_withoutOthers()
{
    int a,b;
    scanf("%d%d",&a,&b);
    a = a + b;
    b = a - b;
    a = a - b;
    printf("%d %d
",a,b);

    return 0;
}

例1-4 鸡兔同笼

#include<stdio.h>

int chicken_rabbit()
{
    int n,m,x,y;    //n是鸡兔总数,m是总腿数,x是鸡的数目,y是兔的数目
    scanf("%d%d",&n,&m);
    x = 2*n-m/2;        //解方程组得
    y = m/2-n;
    if(m%2==1||x<0||y<0)    //若m是奇数则得到的x,y不是整数(因为m是总腿数所以从实际出发也容易理解),同时x,y必须是非负的
    {
        printf("No answer
");
    }
    else
        printf("%d %d
",x,y);

    return 0;
}

判断一个数是不是素数(质数)

int is_prime(int n)
{
    int i;
    for(i=2;i*i<=n;i++)    //n不能太大,因为i*i有可能溢出
        if(n%i==0)    return 0;    //合数
    return 1;    //素数(质数)
}

辗转相除法求最大公约数

#include<stdio.h>

int main()
{
    int m,n,t;
    scanf("%d%d",&m,&n);
    while(n!=0)
    {
        t=m%n;
        m=n;
        n=t;
    }
    printf("%d",m);
    return 0;
}
原文地址:https://www.cnblogs.com/eniac12/p/4730663.html