【C语言经典100题】(1月11日-day29)

cr:经典

题目29

判断一个数字是否为质数。

思路:

输入数字后,for循环从i=2开始取余,直到小于这个数字本身。若是 i 小于这个数字,则不是素数;否则是素数。

代码:

#include<stdio.h>
f(int x);

main()
{
	int x;
	printf("输入数字:");
	scanf("%d", &x);
	f(x);
}

f(int x)
{
	int i;
	for (i = 2; i < x; i++) {
		if (x % i == 0) {
			printf("不是素数。\n");
			break;
		}
	}
	if (x == i) {
		printf("是素数。\n");
	}
}

对方:

//  Created by www.runoob.com on 15/11/9.
//  Copyright © 2015年 菜鸟教程. All rights reserved.
//
 
#include<stdio.h>
#include<math.h>
#define MAX 1000
 
 
int prime[MAX];
 
int isPrimeNaive(int n)
{
    if(n <= 1)
        return 0;
    for(int i = 2; i < n; i++)
        if(n % i == 0)
            return 0;
    return 1;
}
 
int isPrime(int n)
{
    if(n<= 1)
        return 0;
    if(n == 2)
        return 1;
    if(n%2 == 0)
        return 0;
    int limit = (int)sqrt((double)n);
    for(int i = 3; i <= limit; i=i+2)
    {
        if(n % i == 0)
            return 0;
    }
    return 1;
}
 
void sieve()
{
    prime[0] = 0;
    prime[1] = 0;
    for(int i = 2; i < MAX; i++)
        prime[i] = 1;
    int limit = (int)sqrt((double)MAX);
    for(int i = 2; i <= limit; i++)
    {
        if(prime[i])
            for(int j = i*i; j <= MAX; j+=i)
                prime[j] = 0;
    }
}
 
int isPrimeSieve(int n)
{
    if(prime[n])
        return 1;
    else
        return 0;
}
 
int main()
{
    sieve();
    printf("N=%d %d\n", 1, isPrime(1));
    printf("N=%d %d\n", 2, isPrime(2));
    printf("N=%d %d\n", 3, isPrime(3));
    printf("N=%d %d\n", 4, isPrime(4));
    printf("N=%d %d\n", 7, isPrime(7));
    printf("N=%d %d\n", 9, isPrime(9));
    printf("N=%d %d\n", 13, isPrime(13));
    printf("N=%d %d\n", 17, isPrime(17));
    printf("N=%d %d\n", 100, isPrime(100));
    printf("N=%d %d\n", 23, isPrime(23));
    printf("N=%d %d\n", 1, isPrime(1));
    return 0;
}

反思&收获:

不知道为什么对方用了那么一大串。


cr:小林

例29

有5个美女坐在一起,问第5个美女多少岁,她说比第4个美女大2岁,问第4个美女多少岁她说比第3个美女大2岁;问第3个美女多少岁,她说比第2个美女大2岁;问第2个美女多少岁,她说比第一个大2岁。最后问第1个美女,她说10岁。请问第2、3、4、5个美女多少岁? 要求用C语言编程实现。

思路:

要求出后四个美女的年龄,又用到递归,需要从后往前计算才能用到递归。每次计算的时候 f(n-1)就可以往前计算,直到n=1的时候有结果可以直接使用。

代码:

#include<stdio.h>
int f(int n);

main()
{
	int n;
	printf("第2、3、4、5位美女的年龄分别是:");
	f(5);
	printf("\n");
}

int f(int n)
{
	int i = 1;
	if (n != 1) {
		n = f(n - 1) + 2;
		printf("%-3d", n);
	}
	else {
		n = 10;
	}
	return n;
}

对方:

反思&收获:

之前做过的一道题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜東

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值