C代码练手记录之二

偶尔写写代码有健脑益智的功能,且不可贪多啊,过犹不及,上瘾了就停不下来,停下了很快就会对代码越来越缺乏敏锐的阅读力和表达力,代码如写作,多看多练,自然会越来越纯熟。像写作文时常用的修辞手法,总分总的结构等等,这些都会在写代码时慢慢找到类似的感觉。

如果你认为我说的“不可贪多”是反话,请留意下你的身体还好吗,如果996的话,很危险的!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define character_len 32

#define str_len character_len+1

int input_name(char*);
int choose(int,int);
int monkey_beach(void);
int recurcive(int);
int mysql_and_innodb(void);
int echo_num(void);
int main(int argc, char** argv) {
	char name[str_len] = { '\0' };
	//输入姓名
	//while (input_name(name))
	//{
	//	puts("please input your name!");
	//}
	//choose(atoi(argv[1]), atoi(argv[2]));
	//monkey_beach();
	//recursive(5);
	//mysql_and_innodb();
	echo_num();
	return 0;
}
/*
获取键盘输入的字符
*/
int input_name(char* str) {
	int i = 0, asc = 0;
	while (i < (str_len - 1))
	{
		asc = getchar();
		if (asc == '\n')
		{
			break;
		}
		else
		{
			str[i] = asc;
			i++;
		}

	}
	if (str[0] == '\0')
	{
		return 1;
	}
	printf("%s\n", str);
	return 0;
}

/*
从给定的数中,选取M个数字,它们的和等于SUM,输出下标值
*/
int choose(int M,int SUM) {
	int num[] = { 8,9,3,1,6,18,5,3,15,99,9,18,1000,15,500 };
	int len = sizeof(num) / sizeof(int);
	int i = 0;
	if (M == 1)
	{
		while (i < len)
		{
			if (num[i] == SUM) {
				printf("%2d,", i);
			}
			i++;
		}
		printf("\b \n");
	}
	if (M == 2)
	{
		for (size_t i = 0; i < len; i++)
		{
			if (num[i] >= SUM)continue;
			int another = SUM - num[i];
			for (size_t j = i + 1; j < len; j++)
			{
				if (num[j] == another)
				{
					printf("%d-%d\n", i, j);
				}
			}
		}
	}
	if (M == 3)
	{
		for (size_t i = 0; i < len; i++)
		{
			if (num[i] >= SUM) continue;
			int another = SUM - num[i];
			for (size_t j = i + 1; j < len; j++)
			{
				if (num[j] >= another) continue;
				int end = another - num[j];
				for (size_t k = j + 1; k < len; k++)
				{
					if (num[k] == end)
					{
						printf("%d-%d-%d\n", i, j, k);
					}
				}
			}
		}
	}
	return 0;
}

/*
猴子摘桃的小问题
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;
第二天早上将剩下的桃子吃掉一半后,又多吃了一个;以后每天早上都吃
了前一天剩下的一半,再多吃一个;到第 10 天早上想再吃时,见只剩下一
个桃子了。请编程求出猴子第一天最少摘了多少个桃子。
*/
int monkey_beach(void) {
	int total_beach;
	int count;
	for (size_t j = 0; j < 500000; j++)
	{
		total_beach = j;
		for ( count = 1; count < 10; count++)
		{
				total_beach = total_beach - (total_beach / 2 + 1);
		}
		if (total_beach == 1)
		{
			printf("%d\n", j);
			break;
		}
	}
	return 0;
}

/*
做一个简单的递归
对递归有更详细的介绍:http://c.biancheng.net/view/1861.html
递归除了尾递归,还有中间递归和多层递归,这些写法都比较烧脑。另外,递归作为一种
编程技巧,也是有缺陷的,使用递归会带来时间和空间的巨大代价。
*/

int recursive(int a) {
	if (a==0)
	{
		return 0;
	}
	else
	{
		printf("%d\n", a);
		return recursive(--a);
	}
}

/*
mysql && innodb 优化的层次关系
*/
typedef struct _point_variables_url
{
	char id[16];
	char name[64];
	char variable[64];
	char url[128];
}point_variables_url;
int mysql_and_innodb(void) {
	point_variables_url mai[1024];
	strcpy(mai[0].id, "01");
	strcpy(mai[0].name,"introduction_to_innodb");
	strcpy(mai[0].url, "https://dev.mysql.com/doc/refman/8.0/en/innodb-introduction.html");
	printf("%s,%s,%s,%s", mai[0].id, mai[0].name, mai[0].url, mai[0].variable);
	return 0;
}

/*输出1-31的数字,奇数和偶数分开显示*/
int echo_num() {
	int a = 1;
	for (size_t i = 1; i < 32; i++)
	{
		if (i%2==0)
		{
			printf("%d,", i);
		}
	}
	printf("\b \n"); //去掉行末尾的逗号
	for (size_t i = 1; i < 32; i++)
	{
		if (i % 2 == 1)
		{
			printf("%d,", i);
		}
	}
	printf("\b \n"); //去掉行末尾的逗号
	return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值