一、判断素数
素数定义:除了1和本身是它的因子,其余数都不它的因子。
思路:假设数a/b=c;则a/c=b;因此只需要判断从2开始数据a的开根数这样可以减少循环次数;
如果数据a不是素数那么,必定有一个因子大于数a的开根数和有一个小于数据a的开根数;
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//函数实现判断一个数是不是素数
int IsPrime(int x)
{
double m = sqrt(x);
int i = 0;
for (i = 2; i <= m; i++)
{
if (x%i == 0)
{
return 0;
}
return 1;
}
}
int main()
{
int num=0;
printf("请输入一个数");
scanf("%d",&num);*/
int ret = IsPrime(num);*/
if (1 == ret)
{
printf("%d是素数\n",num);
}
else
{
printf("%d不是素数\n",num);
}
system("pause");
return 0;
}
同理打印100~200之间的素数的代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//函数实现判断一个数是不是素数
int IsPrime(int x)
{
double m = sqrt(x);
int i = 0;
for (i = 2; i <= m; i++)
{
if (x%i == 0)
{
return 0;
}
return 1; //是素数返回1;
}
}
int main()
{
int i = 100;
for (i = 100; i <= 300; i++)
{
if (1 == IsPrime(i))
{
printf("%d 是素数\n", i);
}
/*else
{
printf("%d不是素数\n", i);
}*/
}
二、判断闰年
闰年:即能被4整除且不能被100整除或者能被400整除的年份
因此判断闰年的代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
//实现一个函数判断year是不是闰年
void IsLeapyear(int year)
{
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
{
printf("%d是闰年\n",year);
}
else
{
printf("%d不是闰年\n",year);
}
}
int main()
{
int year = 0;
printf("请输入一个年份\n");
scanf("%d",&year);
IsLeapyear(year);
system("pause");
return 0;
}
三、数组逆置
//1.初始化数组arr, 2.清空数组,3,数组逆质
// 数组在编译时确定大小,运行时开辟内存,在栈开辟,最多开辟1M或2M内存
遍历数组初始化,清空数组
逆置数组思路如下:
下标为0 和下标最后的数据交换,下标1和下标倒数数据第一交换,当两者相遇时则已遍历完整个数组
即:
int left=0;
int right=数组长度len-1;
for(left=0;left<=rigjht;left++)
{
数据交换;
right--;
}
主要代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
//数组初始化
void lnit(int arr[],int len)
{
int i = 0;
for (; i <len; i++)
{
arr[i] = i;
}
printf("\n");
}
//清空数组
void Empty(int arr[], int len)
{
int i = 0;
for (; i < len; i++)
{
arr[i] = 0;
}
printf("\n");
}
//展示数组
void Show(int arr[], int len)
{
int i = 0;
for (; i < len; i++)
{
printf("%d", arr[i]);//[]自带解引用;
}
printf("\n");
}
//数组逆质
void Reverse(int arr[], int len)
{
int left = 0;
int right = len - 1;
for (left = 0; left <= right; left++)
{
int temp = 0;
temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
right--;
}
}
int main()
{
int arr[9];
int len = sizeof(arr) / sizeof(arr[0]);
lnit(arr,len);
Show(arr, len);
Empty(arr,len);
Show(arr,len);
Reverse(arr,len);
Show(arr, len);
system("pause");
return 0;
}
//一个数组中其他数出现两次,而仅只有一个数出现一次,找到出现一次的数
思路:任何数异或任何数等于置0,0异或任何数等于任何数,其他数出现两次相异或等于0,与出现一次的数异或即是要找的数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int Fun(int arr[], int len)
{
int i = 0;
int tmp=0;
for (i = 0; i < len; i++)
{
tmp^=arr[i];
}
return tmp;
}
int main()
{
int arr[7] = {1,2,3,4,3,2,1};
int len = sizeof(arr) / sizeof(arr[0]);
int ret = Fun(arr, len);
printf("%d\n",ret);
system("pause");
return 0;
}