闰年计算方法

1.当公历年份不是一百的倍数时,需要被4整除;
2.当公里年份是100的倍数时,必须是400的倍数才行。

代码如下:

#include<stdio.h>
int main()
{
    int year;
    scanf("%d",&year);
    if ((year%400==0)||(year%4==0&&year%100!=0))
        printf("闰年\n");
    else printf("平年\n");
    return 0;
}

判断素数

先把输入的数当成素数,一旦找到有一个数能被其整除,即判断这个数不是素数。特别注意,1不是素数,需特别讨论。

代码如下:

#include<stdio.h>
int main()
{
    int n,i,flag;
    scanf("%d",&n);
    flag=1;
    for (i=2;i<n;i++)
    {
        if (n%i==0) flag=0;break;
    }
    if (n==1) printf("This is not a prime.");
    else if(flag==1) printf("This is a prime.");
    else printf("This is not a prime.");
    return 0;
}

Java版 代码如下:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        int n = reader.nextInt();
        int i,flag = 0;
        if (n==1) {
            System.out.println("This is not a prime.");
            flag = 1;
        }
        for (i=2;i<=Math.sqrt(n);i++) {
            if (n%i==0) {
                flag = 1;
                System.out.println("This is not a prime.");
                break;
            }
        }
        if (flag == 0) System.out.println("This is a prime.");
        reader.close();
    }
}

选择排序(由大到小)

代码如下:

for (i=0;i<n-1;i++)
    {
        for (j=i+1;j<n;j++)
        {
            if (x[j]>x[i])
            {
                temp=x[j];
                x[j]=x[i];
                x[i]=temp;
            }
        }
    }

冒泡排序(由大到小)

代码如下:

for (i=0;i<n-1;i++)
    {
        for (j=0;j<n-i-1;j++)
        {
            if (x[j]<x[j+1])
            {
                temp=x[j];
                x[j]=x[j+1];
                x[j+1]=temp;
            }
        }
    }


杨辉三角

Problem Description

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
上面的图形熟悉吗?它就是我们中学时候学过的杨辉三角。

Input

输入数据包含多组测试数据。
每组测试数据的输入只有一个正整数n(1≤n≤30),表示将要输出的杨辉三角的层数。
输入以0结束。

Output

对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。

Sample Input

2
3
0

Sample Output

1
1 1

1
1 1
1 2 1

代码如下:

#include<stdio.h>
int main()
{
    int n,i,j,k,x[30][30];
    while (scanf("%d",&n)!=EOF&&n!=0)
    {
        for (i=0;i<n;i++)
        {
            for (j=0;j<=i;j++)
            {
                if (j==0||j==i) x[i][j]=1;
                else x[i][j]=x[i-1][j-1]+x[i-1][j];
            }
        }
        for (i=0;i<n;i++)
        {
            for (j=0;j<=i;j++)
            {
                if (j==i) printf("%d\n",x[i][j]);
                else printf("%d ",x[i][j]);
            }
        }
        printf("\n");
    }
    return 0;
}

extern int strcmp(const char s1,const char s2);

规则
当s1<s2时,返回为负数;
当s1==s2时,返回值= 0;
当s1>s2时,返回正数。
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'0'为止。如:
"A"<"B" "a">"A" "computer">"compare"
特别注意:strcmp(const char s1,const char s2)这里面只能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。
ANSI标准规定,返回值为正数,负数,0 。而确切数值是依赖不同的C实现的。


快速排序
Problem Description
给定N(N≤10^5)个整数,要求用快速排序对数据进行升序排列,注意不得使用STL。
Input
连续输入多组数据,每组输入数据第一行给出正整数N(≤10^5),随后给出N个整数,数字间以空格分隔。
Output
输出排序后的结果,数字间以一个空格间隔,行末不得有多余空格。
Sample Input
8
49 38 65 97 76 13 27 49
Sample Output
13 27 38 49 49 65 76 97

代码如下:

#include<stdio.h>
void qsort(int a[],int l,int r)
{
    int x=a[l],i=l,j=r;
    if (l>=r) return;
    while (i<j)
    {
        while (i<j&&a[j]>=x) j--;
        a[i]=a[j];
        while (i<j&&a[i]<=x) i++;
        a[j]=a[i];
    }
    a[i]=x;
    qsort(a,l,i-1);
    qsort(a,i+1,r);
}

int main()
{
    int n,i;
    while(~scanf("%d",&n))
    {
        int a[100001];
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        qsort(a,0,n-1);
        for (i=0;i<n;i++)
        {
            if (i==n-1) printf("%d\n",a[i]);
            else printf("%d ",a[i]);
        }
    }
    return 0;
}

最小公倍数和最大公约数

Problem Description
从键盘输入两个正整数,求这两个正整数的最小公倍数和最大公约数,并输出。
Input
输入包括一行。
两个以空格分开的正整数。
Output
两个整数的最小公倍数和最大公约数。
Sample Input
6 8
Sample Output
24 2
Example Code

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        int n = reader.nextInt();
        int m = reader.nextInt();
        int max = 0, min, r, n1 = n, m1 = m;
        if (m > n) {
            int t = m;
            m = n;
            n = t;
        }
        while (m != 0) {
            r = n % m;
            n = m;
            m = r;
            max = n;
        }
        min = m1 * n1 / max;
        System.out.printf("%d %d", min, max);
        reader.close();
    }
}