programming challenge 1 基础入门....

本文分享了初学者在编程过程中遇到的基础问题,包括浮点型计算、逻辑判断和算法应用,并通过具体实例展示了如何解决这些问题。从入门基础题到扫雷问题、旅行决策和LCD显示数字的编程挑战,文章详细解析了每道题目的关键点和解决策略,旨在帮助初学者巩固基础知识并提升编程能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这些都是入门基础题,做完之后发现自己基础不牢啊...什么浮点型计算不清楚,各种wa问题,各种BUG快速难以找到,还有自己的一些粗心的存在。蛋疼。

第一题:The 3n + 1 problem

这个问题描述非常简单,但数据量有点大,开始打表始终过不了,后来还是一边保存数据,一边输出答案AC了;

#include <cstdio>
#include <cstring>
#include <algorithm>
int f[5000100];
int a[1000100];
int n,m;
int ff(int x)
{
	int k=x,t=1;
	while (k!=1)
	{
		if (k % 2==0)
			k/=2;
		else 
			k=3*k+1;
		t++;	
	}
	return t;
}
int main()
{
	memset(f,0,sizeof(f));
	while (~scanf("%d%d",&n,&m))
	{
		int max=0;
		int n1=n,m1=m;
		if (n>m)
		{
		int t=n;
		n=m;
		m=t;
		}
		for (int i=n;i<=m;i++)
		{
			if (f[i]==0)
			f[i]=ff(i);
			if (f[i]>max)
			max=f[i];
		}
		printf("%d %d %d\n",n1,m1,max);
	}
	return 0;
}


 

第二题:Minesweeper 

扫雷问题,非常简单的模拟吧...一遍AC...

#include <cstdio>
#include <cstring>
int map[110][110];
void ff(int x,int y)
{
	if ( (x-1>0) && (y-1>0) && map[x-1][y-1]!=-1)
	map[x-1][y-1]++;
	if ( (x-1>0) && (y>0) && map[x-1][y]!=-1)
	map[x-1][y]++;
	if ( (x-1>0) && (y+1>0) && map[x-1][y+1]!=-1)
	map[x-1][y+1]++;
	if ( (x>0) && (y-1>0) && map[x][y-1]!=-1)
	map[x][y-1]++;
	if ( (x>0) && (y+1>0) && map[x][y+1]!=-1)
	map[x][y+1]++;
	if ( (x+1>0) && (y-1>0) && map[x+1][y-1]!=-1)
	map[x+1][y-1]++;
	if ( (x+1>0) && (y>0) && map[x+1][y]!=-1)
	map[x+1][y]++;
	if ( (x+1>0) && (y+1>0) && map[x+1][y+1]!=-1)
	map[x+1][y+1]++;
}
int main()
{
	int n,m,t=1;
	scanf("%d%d",&n,&m);
	while ((n+m))
	{
		memset(map,0,sizeof(map));
		for (int i=1;i<=n;i++)
		{
			getchar();
			for (int j=1;j<=m;j++)
			{
				char c;
				scanf("%c",&c);
				if (c=='*')
				map[i][j]=-1;
			}
		}
		for (int i=1;i<=n;i++)
			for (int j=1;j<=m;j++)
			if (map[i][j]==-1)
			ff(i,j);
		printf("Field #%d:\n",t++);
		for (int i=1;i<=n;i++)
		{
			for (int j=1;j<=m;j++)
			if (map[i][j]==-1)
			printf("*");
			else 
			printf("%d",map[i][j]);
			printf("\n");		
		}
		scanf("%d%d",&n,&m);
		if (n+m) printf("\n");
	} 
	return 0;
}


 

第三题:The Trip

旅行,这个问题描述没搞太清楚,题意都没理解透就开始写代码,结果自然WA了,后来网上看题解,才发现这是最小值中找最大...唉...哦,其中的浮点型计算也很麻烦,试过很多种方法,蛋疼,最后还是化成整数计算...

#include <cstdio>
int main()
{
	double a[1010];
	int n;
	double f;
	while (~scanf("%d",&n) && n)
	{
		f=0;
		for (int i=1;i<=n;i++)
		{
			scanf("%lf",&a[i]);
			f+=a[i];
		}
		f=f/n;
		double ff=0,fff=0;
		for (int i=1;i<=n;i++)
		if (a[i]>f)
			ff+=(int)((a[i]-f)*100)/100.0;
		else 
		 	fff+=(int)((f-a[i])*100)/100.0;
		printf("$%.2lf\n",ff<fff?fff:ff);
	}
	return 0;
}


 

第四题:LCD Display

简单的显示数字,耐心一点吧...能AC的...但是我不是一个很沉得住气的人...

#include <cstdio>
#include <cstring>
char z[][40]={ " -     -  -     -  -  -  -  - ",
			   "| |  |  |  || ||  |    || || |",
			   "       -  -  -  -  -     -  - ",
			   "| |  ||    |  |  || |  || |  |",
			   " -     -  -     -  -     -  - "};
int main()
{
	int s,l;
	char m[10];
	while(~scanf("%d",&s) && s)
	{
		getchar();
		scanf("%s",&m);
		l=strlen(m);
		for (int i=0;i<2*s+3;i++)
		{
			for (int j=0;j<l;j++)
			{
				int num=m[j]-'0';
				if (i==0 || i==s+1 || i==s*2+2)
				{
					int t;
					if (i==0) t=0;
					if (i==s+1) t=2;
					if (i==s*2+2) t=4;
					printf("%c",z[t][num*3]);
					for (int k=0;k<s;k++)
					printf("%c",z[t][num*3+1]);
					printf("%c",z[t][num*3+2]);
				}
				else if (i>0 && i<s+1)
				{
					printf("%c",z[1][num*3]);
					for (int k=0;k<s;k++)
					printf("%c",z[1][num*3+1]);
					printf("%c",z[1][num*3+2]);
				}
				else
				{
					printf("%c",z[3][num*3]);
					for (int k=0;k<s;k++)
					printf("%c",z[3][num*3+1]);
					printf("%c",z[3][num*3+2]);
				}
				if (j!=l-1)
				printf(" ");
			}
			printf("\n");
		}
		printf("\n");
	}
	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值