C语言:5_29上机题

在这里插入图片描述

#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);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值