#include <stdio.h>
#include <math.h>
#include <assert.h>
#include <stdlib.h>//include <malloc.h>
#include <ctype.h>
void SiftPrime(int n)
{
//assert
int *arr = (int *)malloc(sizeof(int) * n);//申请空间 存放标记位 0代表已经被筛除 不用再次筛除
//assert
arr[0] = 0;
arr[1] = 1;
for(int i=2; i<n; i++)
{
arr[i] = 1;
}
for(int i=2; i<=sqrt(1.0 * n); i++)//筛子的值选择
{
for(int j=i+1; j<n; j++)//要筛除的值下标
{
if(arr[j] == 1 && j%i==0)
{
arr[j] = 0;
}
}
}
for(int i=0; i<n; i++)
{
if(arr[i] == 1)
{
printf("%d\n", i);
}
}
printf("\n");
free(arr);
}
void SelectSort(int arr[], int len)//时间复杂度O(n*2) 空间复杂度O(1) 不稳定
{
//assert
int minindex = 0;
for(int i=0; i<len-1; i++)//循环选择次数
{
minindex = i;//当前我们认为i指向的值最小
for(int j=i+1; j<len; j++)//从待排序队列中依次比较
{
if(arr[j] < arr[minindex])//如果j指向的值比minindex指向的值还小,我就改变minindex的值为j
{
minindex = j;
}
}
if(minindex != i)
{
int tmp = arr[minindex];
arr[minindex] = arr[i];
arr[i] = tmp;
}
}
}
//1每行第一个值为1 2每行最后一个值为1 3剩下的值应该是上边两个值的和
void YangHui()
{
#define ROW 10
int arr[ROW][ROW] = {0};
for(int i=0; i<ROW; i++)
{
for(int j=0; j<=i; j++)
{
if(j==0 || j==i)
{
arr[i][j] = 1;
}
else
{
arr[i][j] = arr[(i-1+ROW)%ROW][(j-1+ROW)%ROW] + arr[(i-1+ROW)%ROW][j];
}
}
}
for(int i=0; i<ROW; i++)
{
for(int j=0; j<=i; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
#undef ROW
}
void Magic()
{
#define ROW 3
#define COL ROW
int arr[ROW][COL] = {0};
int priorRow = 0;
int priorCol = 0;
arr[0][ROW/2] = 1;
priorRow = 0;
priorCol = ROW/2;
for(int i=2; i<=ROW*COL; i++)//从2开始放 直到把25放进去
{
if(arr[(priorRow-1+ROW)%ROW][(priorCol+1)%COL] == 0)
{
priorRow = (priorRow-1+ROW)%ROW;
priorCol = (priorCol+1)%COL;
}
else
{
priorRow = (priorRow+1)%ROW;
}
arr[priorRow][priorCol] = i;
}
for(int i=0; i<ROW; i++)
{
for(int j=0; j<COL; j++)
{
printf("%-4d ", arr[i][j]);
}
printf("\n");
}
#undef ROW
#undef COL
}
int BinSearch(int arr[], int len, int x)
{
//assert
int left = 0;
int right = len-1;
int mid = 0;
while(left <= right)
{
mid = (right - left)/2 + left;//(left + right)/2
if(arr[mid] == x)
{
return mid;
}
else if(arr[mid] > x)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
return -1;
}
void A_Za_z(char *des, const char *src)
{
//assert
const char*uppers = "ZYXWVUTSRQPONMLKJIHGFEDCBA";
const char*lowers = "zyxwvutsrqponmlkjihgfedcba";
while(*src != '\0')
{
if(isupper(*src))
{
*des = uppers[*src - 'A'];
}
else if(islower(*src))
{
*des = lowers[*src - 'a'];
}
else
{
*des = *src;
}
src++;
des++;
}
*des = '\0';
}
int main()
{
SiftPrime(100);
int arr[] = {2,3,5,1,8,0,7,4,9,6};
int len = sizeof(arr)/sizeof(arr[0]);
SelectSort(arr, len);
for(int i=0; i<len; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
YangHui();
Magic();
int arr2[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
printf("%d\n", BinSearch(arr2, sizeof(arr)/sizeof(arr[0]), 6));
char str1[100];
char str2[] = "abc---123WYZ;;; Az205207";
A_Za_z(str1, str2);
printf("密码为: %s\n", str2);
printf("原文为: %s\n", str1);
}
C语言:5_29上机题
于 2021-06-10 10:32:17 首次发布