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;
}
对方:![](https://i-blog.csdnimg.cn/blog_migrate/6eacd12b37145c17a690b5eacf8d45e5.png)
反思&收获:
之前做过的一道题。