programming challenge 1(基础入门2)

本文涵盖了信息技术领域的多个子领域,包括但不限于前端开发、后端开发、移动开发、游戏开发、大数据开发、开发工具、嵌入式硬件等。文章深入探讨了各领域的核心概念和技术实践,并通过实例说明了实际应用中如何解决复杂问题。

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

#include <cstdio>
#include <cstring>
int g[30],vist[30],f[1010][30],k,n;
char name[30][100];
void ff()
{
	memset(vist,true,sizeof(vist));
	bool fff=true;
	bool pj=false;
	while (fff)
	{
		memset(g,0,sizeof(g));
		for (int i=1;i<=k;i++)
			for (int j=1;j<=n;j++)
			{
				int w=f[i][j];
				if (vist[w])
				{
					g[w]++;
					break;
				}
			}
		for (int i=1;i<=n;i++)
		if (g[i]>k/2)
		{
			fff=false;
			pj=true;
			puts(name[i]);
			break;
		}
		if (!fff) break;
		fff=false;
		int first=0;
		int p;
		int j;
		for (int i=1;i<=n;i++)
			if (vist[i])
			{
				j=i;
				first++;
				p=g[i];
				break;
			}
		for (int i=j+1;i<=n;i++)
			if (vist[i])
			{
				first++;
				if (p!=g[i])
				{
					fff=true;
					break;
				}
			}
		if (!fff || first==1) break;
		int min=0x3fffffff;
		for (int i=1;i<=n;i++)
				if (min>g[i] && vist[i] ) 
				min=g[i];
		for (int i=1;i<=n;i++)
				if (min==g[i] && vist[i])
					vist[i]=false;
	}
	if (!pj)
	for (int i=1;i<=n;i++)
		if (vist[i]) puts(name[i]);
	return;
}
int main()
{
	int T;
	scanf("%d",&T);
	while (T--)
	{
		scanf("%d",&n);
		getchar();
		for (int i=1;i<=n;i++)
		gets(name[i]);
		k=1;
		char s[100];
		while (gets(s)!=NULL && s[0]!='\0')
		{
			int j=1;
			int l;
			l=strlen(s);
			for (int i=0;i<l;i++)
				if (s[i]!=' ')
				{
					int q=0;
					while (s[i]!=' ' && s[i]!='\0')
						q=q*10+s[i++]-'0';
					f[k][j++]=q;
				}
			k++;
		}
		k--;
		ff();
		if (T) printf("\n");
	}
	return 0;
} 


第五题:Graphical Editor

画图工具吧...自己算...只有F难弄一点...也是蛋疼。

#include <cstdio>
#include <cstring>
int x,x1,x2,y,y1,y2,n,m;
char k;
char p[300][300];
void fc()
{
	for (int i=1;i<=n;i++)
	for (int j=1;j<=m;j++)
	p[i][j]='O';
}
void fl(int x,int y,char c)
{
	p[y][x]=c;
}
void fv(int x,int y1,int y2,char c)
{
	if (y1>y2)
	{
		int t=y1;
		y1=y2;
		y2=t;
	}
	for (int i=y1;i<=y2;i++)
	p[i][x]=c;
}
void fh(int x1,int x2,int y,char c)
{
	if (x1>x2)
	{
		int t=x1;
		x1=x2;
		x2=t;
	}
	for (int i=x1;i<=x2;i++)
	p[y][i]=c;
}
void fk(int x1,int x2,int y1,int y2,char c)
{
	for (int i=y1;i<=y2;i++)
	for (int j=x1;j<=x2;j++)
	p[i][j]=c;
}
void ff(int x,int y,char c,char c1)
{
	if (p[y][x]==c || p[y][x]!=c1)
	return;
	p[y][x]=c;
	ff(x-1,y,c,c1);
	ff(x+1,y,c,c1);
	ff(x,y-1,c,c1);
	ff(x,y+1,c,c1);
}
void fs()
{
	for (int i=1;i<=n;i++)
	{
		for (int j=1;j<=n;j++)
		printf("%c",p[i][j]);
		printf("\n");
	}
}
int main()
{
	char c;
	while (~scanf("%s",&c)&& c!='X')
	{
		if (c=='I')
		{
			scanf("%d%d",&m,&n);
			fc();
		}
		else 
		if (c=='C')
			fc();
		else 
		if (c=='L')
		{
			scanf("%d %d %c",&x,&y,&k);
			fl(x,y,k);
		}
		else if (c=='V')
		{
			scanf("%d %d %d %c",&x,&y1,&y2,&k);
			fv(x,y1,y2,k);
		}
		else if (c=='H')
		{
			scanf("%d %d %d %c",&x1,&x2,&y,&k);
			fh(x1,x2,y,k);
		}
		else if(c=='K')
		{
			scanf("%d %d %d %d %c",&x1,&x2,&y1,&y2,&k);
			fk(x1,x2,y1,y2,k);
		} 
		else if (c=='F')
		{
			char k1;
			scanf("%d %d %c",&x,&y,&k);
			k1=p[y][x];
			ff(x,y,k,k1);
		}
		else if (c=='S')
		{
			char ss[1000];
			scanf("%s",&ss);
			puts(ss);
			fs();
		}
		else 
		{
			char ss[1000];
			gets(ss);
			continue;
		}
	}
	return 0;
} 


 

第六题:Interpreter

其实就是计算机内存和寄存器的关系,至于题目挺容易的,就是数据输入的时候有点纠结,学到了新的东西sscanf,

#include <cstdio>
#include <cstring>
int f[11];
int m[1010];
char s[100];	
int main()
{
	int t,a,b,c;
	scanf("%d",&t);
	getchar();
	for(int l=1;l<=t;l++)
	{
		int i=0;
		if (l==1) getchar();
		memset(m,0,sizeof(m));
		while (fgets(s,sizeof(s),stdin))
		{
			if (s[0]=='\n') break;
			sscanf(s,"%d",&m[i++]);
		}
		memset(f,0,sizeof(f));
		i=0;
		int k=0;
		bool end=true;
		while (end)
		{
			i++;
			a=m[k]/100;
			b=m[k]/10%10;
			c=m[k]%10;
			switch(a)
			{
				case 1:
						if (m[k]==100)
						end=false;
						break;
				case 2:
						f[b]=c;
						k++;
						break;
				case 3:
					{
						f[b]+=c;
						f[b]%=1000;
						k++;
						break;}
				case 4:
					{
						f[b]*=c;
						f[b]%=1000;
						k++;
						break;}
				case 5:
					{
						f[b]=f[c];
						k++;
						break;}
				case 6:
					{
						f[b]+=f[c];
						f[b]%=1000;
						k++;
						break;}
				case 7:
					{
						f[b]*=f[c];
						f[b]%=1000;
						k++;
						break;}
				case 8:
					{
						f[b]=m[f[c]];
						k++;
						break;}
				case 9:
					{
						m[f[c]]=f[b];
						k++;
						break;}
				case 0:
					{
						if (f[c]!=0) k=f[b];
						else k++;
						break;}				
			}
		}
		if (l!=1) 
			printf("\n");
		printf("%d\n",i);
	}
	return 0;
}


 

第七题:Check The Check

这个题我非常蛋疼了,挺容易的一个模拟题,死活AC不了...原因我至今没找出来,还是贴出我的错误代码吧,哪位找出来错误提出来下,谢了,估计我的代码就只有我自己能看懂....ORZ

#include <cstdio>
#include <cstring>
#include <cmath>
char map[20][20];
int xb=0,yb=0,xw=0,yw=0,xbb,ybb,yww,xww;
int fp(int x,int y,int t)
{
	if (t==-1)
	{
		if ((map[x+t][y-1]=='k' || map[x+t][y+1]=='k'))
			return 1;
	}
	else
	{
		if ((map[x+t][y-1]=='K' || map[x+t][y+1]=='K'))
			return 1;
	}
	return 0;
}
int fr(int x,int y,int t)
{
	if (t==-1)
	{
		if (x>xb)
			{
				x=x+xb;
				xb=x-xb;
				x=x-xb;
			}
			if (y>yb)
			{
				y=y+yb;
				yb=y-yb;
				y=y-yb;
			}
		if (x==xb)
		{
			for (int i=y+1;i<yb;i++)
				if (map[x][i]!='.') return 0;
			return 1;
		}
		else 
		if (y==yb)
		{
			for (int i=x+1;i<xb;i++)
				if (map[i][y]!='.') return 0;
			return 1;
		}
		else return 0;	
	}
	else 
	{
			if (x>xw)
			{
				x=x+xw;
				xw=x-xw;
				x=x-xw;
			}
			if (y>yw)
			{
				y=y+yw;
				yw=y-yw;
				y=y-yw;
			}
		if (x==xw)
		{
			for (int i=y+1;i<yw;i++)
				if (map[x][i]!='.') return 0;
			return 1;
		}
		else 
		if (y==yw)
		{
			for (int i=x+1;i<xw;i++)
				if (map[i][y]!='.') return 0;
			return 1;
		}
		else return 0;
	}
	return 0;
}
int fb(int x,int y,int t)
{
	if (t==-1)
	{
		if (fabs(xb-x)!=fabs(yb-y)) return 0;
		else 
		{
			if (x>xb)
			{
				x=x+xb;
				xb=x-xb;
				x=x-xb;
			}
			if (y>yb)
			{
				y=y+yb;
				yb=y-yb;
				y=y-yb;
			}
			int k=yb-y;
			for (int i=1;i<k;i++)
			if (map[x+i][y+i]!='.') return 0;
			return 1;
		}
	}
	else 
	{
		if (fabs(xw-x)!=fabs(yw-y)) return 0;
		else 
		{
			if (x>xw)
			{
				x=x+xw;
				xw=x-xw;
				x=x-xw;
			}
			if (y>yw)
			{
				y=y+yw;
				yw=y-yw;
				y=y-yw;
			}
			int k=yw-y;
			for (int i=1;i<k;i++)
			if (map[x+i][y+i]!='.') return 0;
			return 1;
		}
	}
}
int fn(int x,int y,int t)
{
	if (t==-1)
	{
		return (fabs(x - xb) == 2 && fabs(y - yb) == 1) ||  
               (fabs(x - xb) == 1 && fabs(y - yb) == 2);  

	}
	else 
	{
		return (fabs(x - xw) == 2 && fabs(y - yw) == 1) ||  
               (fabs(x - xw) == 1 && fabs(y - yw) == 2);
	}
	return 0;
}
int main()
{
	int c=1;
	while (1)
	{
		memset(map,0,sizeof(map));
		int kb=0,kw=0;
		xbb=0;ybb=0;xww=0;yww=0;   // kb是黑棋 kw是白棋 
		for (int i=1;i<=8;i++)
		{
		for (int j=1;j<=8;j++)
		{
			scanf("%c",&map[i][j]);
			if (map[i][j]=='k')
			{xbb=i;ybb=j;}
			if (map[i][j]=='K')
			{xww=i;yww=j;}
		}
		getchar();
		}
		for (int i=1;i<=8;i++)
		{
		for (int j=1;j<=8;j++)
		{
			xb=xbb;xw=xww;yb=ybb;yw=yww;
			if (map[i][j]=='P')
				kb=fp(i,j,-1);
			if (map[i][j]=='p')
				kw=fp(i,j,1);
			if (map[i][j]=='R')
				kb=fr(i,j,-1);
			if (map[i][j]=='r')
				kw=fr(i,j,1);
			if (map[i][j]=='B')
				kb=fb(i,j,-1);
			if (map[i][j]=='b')
				kw=fb(i,j,1);
			if (map[i][j]=='Q')
			{
				kb=fr(i,j,-1);
				xb=xbb;xw=xww;yb=ybb;yw=yww;
				kb+=fb(i,j,-1);
			}
			if (map[i][j]=='q')
			{
				kw=fr(i,j,1);
				xb=xbb;xw=xww;yb=ybb;yw=yww;
				kw+=fb(i,j,1);
			}
			if (map[i][j]=='N')
				kb=fn(i,j,-1);
			if (map[i][j]=='n')
				kw=fn(i,j,1);
			if (kb || kw) break;	
		}
		if (kb || kw) break;
		}
		if (xb+yb+xw+yw==0) break;
		if (kw) printf("Game #%d: white king is in check.\n",c++);
		if (kb) printf("Game #%d: black king is in check.\n",c++);
		if (!(kb+kw)) printf("Game #%d: no king is in check.\n",c++);
		getchar();
	}
	return 0;
}


第八题:Australian Voting

澳大利亚投票,好吧,我又看错题目了,蛋疼,其实只要知道题意,想想就知道怎么做了....

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值