【C语言记录洛谷刷题--(1)】


记录洛谷刷题

  • P1789 【Mc生存】插火把
  • P1830 轰炸III
  • P2006 赵神牛的游戏
  • P2084 进制转换
  • P2676 [USACO07DEC] Bookshelf B
  • P2956 [USACO09OCT] The Robot Plow G
  • P3717 [AHOI2017初中组] cover
  • P3742 umi的函数
  • P4326 [COCI2006-2007#1] Herman
  • P4327 [COCI2006-2007#1] Okviri
  • P5704 【深基2.例6】字母转换
  • P5706 【深基2.例8】再分肥宅水
  • P5718 【深基4.例2】找最小值
  • P5725 【深基4.习8】求三角形
  • P5731 【深基5.习6】蛇形方阵
  • P5734 【深基6.例6】文字处理软件
  • P5737 【深基7.例3】闰年展示


P1789 【Mc生存】插火把

https://www.luogu.com.cn/problem/P1789

#include
int main(){
	int n, a[105][105] = {0}, x,y, m, k;
		scanf("%d%d%d",&n,&m,&k);
	for(int i=0; i<m; i++) {
		scanf("%d%d",&x,&y);
		for(int j=x-2;j<=x+2;j++) if(j>=0) a[j][y]=1;	//火把
		for(int j=y-2;j<=y+2;j++)  if(j>=0) a[x][j]=1;
		a[x-1][y-1]=1;
		a[x-1][y+1]=1;
		a[x+1][y-1]=1;
		a[x+1][y+1]=1;
	}
	for(int i=0;i<k;i++)                //萤石
	{
		scanf("%d%d",&x,&y);
		for(int p=x-2;p<=x+2;p++)
		{
			for(int q=y-2;q<=y+2;q++)
			{
				if(p>=0&&q>=0) a[p][q]=1;
			}
		}
	}
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(a[i][j]==0)	ans++;
		}
	}
	printf("%d",ans);
	return 0;
}

P1830 轰炸III

https://www.luogu.com.cn/problem/P1830

#include
int main(){
	int n,m,x,y;
	scanf("%d%d%d%d",&n,&m,&x,&y);
	struct bomb{
		int time;
		int last;
	}
	a[105][105];
	for(int i=0;i<x;i++){
		int x1,y1,x2,y2;
		scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
		int time=0,last=0;
		for(int p=x1;p<=x2;p++)
			for(int q=y1;q<=y2;q++){
				a[p][q].time++;
				a[p][q].last=i+1;
			}	
	}
	
	for(int i=0;i<y;i++){
		int p,q;
		scanf("%d%d",&p,&q);
		if(a[p][q].time==0)
			printf("N\n");
		else
			printf("Y %d %d\n",a[p][q].time,a[p][q].last);		
	}
} 

P2006 赵神牛的游戏

https://www.luogu.com.cn/problem/P2006

#include
#define BOOL int
#define TRUE 1
#define FALSE 0
int main()
{
	int power=0, m=0, boss=0;
	scanf("%d%d%d", &power, &m , &boss);
	BOOL flag = FALSE;//开一个布尔变量,如果模拟完了flag的值还是false的话就表明当前没有任何的一个技能能够打败boss,那么就输出-1,否则,如果flag的值为true的话就表明当前至少有一个招数可以打败boss
	for(int i=1;i<=m;i++)
	{
		int cost=0 ,hurt=0;//第i个技能耗费的法力值,第i个技能可以造成的对boss的伤害值
		scanf("%d%d", &cost,& hurt);//读入第i个技能耗费的法力值和可以造成的对boss的伤害值
		if(cost!=0)//这是为了预防除数为0的判断
		{
			int ans=(power/cost)*hurt;//ans表示只用这个技能最多能够对这个boss产生多少的伤害值
			if(ans >=  boss)//如果能够杀死这个boss
			{
				printf("%d ",i);//那么就去输出这个技能的编号
				flag=TRUE;//标记一下
			}
		}
		else if(cost==0 && hurt!=0)//否则如果除数为0(即第i个技能可以放无限次,“第i个技能”也可以称作“编号为i的这个技能”)
		{
			printf("%d ",i);//输出它的编号
			flag=TRUE;//标记一下
		}
	}
	if(flag==FALSE)//如果模拟完了flag的值还是false的话就表明当前没有任何的一个技能能够打败boss
	{
		printf("-1");
	}
	return 0;
}

P2084 进制转换

https://www.luogu.com.cn/problem/P2084

#include
#include
int main(void)
{
	int i,jz,j;                                                
	char n[1005];                                       
	scanf("%d%s",&jz,n);                     
	for(i=0,j=strlen(n)-1;j>=0;i++,j--)      //i是为了指向每一位数,j是为了输出所在位置
	{
		if(i!=0&&n[i]!='0')
			printf("+");     //判断是否第一项,不是,输出加号。当然如果系数为零也不需要输出 ,从右向左判断
		if(n[i]!='0')                                        //从右向左判断
			printf("%c*%d^%d",n[i],jz,j);//判断系数是否为零,不是,输出
	}
}

P2676 [USACO07DEC] Bookshelf B

https://www.luogu.com.cn/problem/P2676

#include
 
int main()
{
    long long N,B,sum=0,num=0;
    scanf("%lld%lld",&N,&B);
    long long data[N];
    long long i,j;
    for(i = 0;i < N;i ++)
    {
    	scanf("%lld",&data[i]);	
    }
   
    for(i = 0;i < N;i ++)   
    {
   	    for(j = 0;j < N - 1 - i;j++)
   	    {
   	        if(data[j] > data[j+1])     
		    {
		 	long long temp;        
			temp = data[j];
			data[j] = data[j+1];
			data[j+1] = temp;
		    }	
	    }
    }
    for(i=N-1;i>0;i--)
    {
        sum+=data[i];
        num++;
        if(sum>=B)break;
    }
    printf("%d",num);
    return 0;
} 

P2956 [USACO09OCT] The Robot Plow G

https://www.luogu.com.cn/problem/P2956

#include
int a[245][245],X,Y,I,cnt,i,j;
int main(){
	scanf("%d%d%d",&X,&Y,&I);//地长,地宽,指令数
	int x1,y1,x2,y2;
	while(I--)
	{
		scanf("%d %d %d %d",&x1,&y1,&x2,&y2);//输入起点和终点数据
		for(i=x1;i<=x2;i++)
		{
			for(j=y1;j<=y2;j++)
				a[i][j]=1;
		}
	}	
	for(i=1;i<=X;i++)
	{
		for(j=1;j<=Y;j++)
		{
			if(a[i][j]==1) cnt++;
		}
	}
	printf("%d",cnt);
	
	return 0;
}

}

P3717 [AHOI2017初中组] cover

https://www.luogu.com.cn/problem/P3717

#include
#include
int num[123][123] = {0};
int main(void)
	{
		int n, m, r, x, y,i,j,count = 0;
		scanf("%d %d %d",&n,&m,&r);
		while(m--)
		{
			scanf("%d %d",&x,&y);
			for( i = 1; i <= n; i++)
				for( j = 1; j <= n; j++)
				{
					double d = sqrt((x - i) * (x - i) + (y - j) * (y - j));	//两点间距离 
					if(d <= r) num[i][j]++;
				}
		}
		for( i = 1; i <= n; i++)
			for( j = 1; j <= n; j++)
				if(num[i][j] > 0) count++;
		printf("%d",count);
	}

P3742 umi的函数

https://www.luogu.com.cn/problem/P3742

#include
int main()
{
	int n, i;   
	char x[101], y[101];
	scanf("%d", &n);
	scanf("%s%s", x, y);
	for(i=0;i<n;i++)
        {
		if(x[i]<y[i])
                {
			printf("-1");
			return 0;
		}
	}
	printf("%s",y);	
	return 0;		
}

P4326 [COCI2006-2007#1] Herman

https://www.luogu.com.cn/problem/P4326

#include
#include
#define p 3.1415926535898
int main()
{
	double  r;
	scanf("%lf",&r);
	printf("%.6lf\n%.6lf\n",p*r*r,r*r*2);
}

P4327 [COCI2006-2007#1] Okviri

https://www.luogu.com.cn/problem/P4327

#include 
using namespace std;
int len1, len2, i = 3, j = 1;
char a[20], b[10][100], c;

int main() {
	cin >> a;
	len1 = strlen(a); //输入字符的长度
	len2 = 4 * len1 + 1; //输出字符的长度
	memset(b, '.', sizeof(b)); //将b全赋为.
	while (i <= len2) {
		b[3][i] = a[j - 1];
		if (j % 3 == 0)
			c = '*';
		else
			c = '#'; //若为3的倍数,则用*,若不是,则为#
		b[1][i] = c;
		b[5][i] = c;
		b[2][i - 1] = c;
		b[2][i + 1] = c;
		b[4][i - 1] = c;
		b[4][i + 1] = c; //根据字母的位置推出其他字符的位置,并填入b数组中
		if (b[3][i - 2] != '*')
			b[3][i - 2] = c;
		if (b[3][i + 2] != '*')
			b[3][i + 2] = c; //若以被*覆盖,则不能被#覆盖
		i += 4;
		j++;
	}
	for (int i = 1; i <= 5; i++) {
		for (int j = 1; j <= len2; j++)
			cout << b[i][j];
		cout << endl;}
}
	

P5704 【深基2.例6】字母转换

https://www.luogu.com.cn/problem/P5704

#include
int main(void)
{
	char n;
	scanf("%c",&n);
    n=n-32;
	printf("%c",n);

}

P5706 【深基2.例8】再分肥宅水

https://www.luogu.com.cn/problem/P5706

#include
int main()
{
	int n;
	double t;
	scanf("%lf %d",&t,&n);
	printf("%.3lf\n",t/(n*1.0));
	printf("%d\n",2*n);
}

P5718 【深基4.例2】找最小值

https://www.luogu.com.cn/problem/P5718

#include
int main(void)
{
	int n,i,min,a[1005];
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	min=a[0];
	for(i=1;i<n;i++)
	{
		if(min>a[i])
		{
			min=a[i];
		}
	}
	printf("%d",min);
}

P5725 【深基4.习8】求三角形

https://www.luogu.com.cn/problem/P5725

#include
int main(void)
{
	int n,i,j,num=1;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)
		{
			if(num<10)
			{
				printf("0%d",num);
			}
			else{printf("%d",num);}
			num++;
		}printf("\n");
	}printf("\n");
	num=1;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=(n-i);j++)
		{
			printf("  ");
		}
		for(j=n-i+1;j<=n;j++)
		{
			if(num<10){
				printf("0%d",num);
			}
			else
			{
				printf("%d",num);
			}num++;
		}printf("\n");
	}printf("\n");
}

P5731 【深基5.习6】蛇形方阵

https://www.luogu.com.cn/problem/P5731

#include
int a[15][15];
int main()
{
	int n,mark=1,x=1,y=0;
	scanf("%d",&n);
	while (mark<=n*n)
	{
		while(y+1<=n&&a[x][y+1]==0)a[x][++y]=mark++;
		while(x+1<=n&&a[x+1][y]==0)a[++x][y]=mark++;
		while(y-1>=1&&a[x][y-1]==0)a[x][--y]=mark++;
		while(x-1>=1&&a[x-1][y]==0)a[--x][y]=mark++;
	}
	for (int i=1;i<=n;i++)
	{
		for (int j=1;j<=n;j++)
		{
		printf("%3d",a[i][j]);	
		}
		printf("\n");	
	}	
	return 0;
}

P5734 【深基6.例6】文字处理软件

https://www.luogu.com.cn/problem/P5734

#include
#include
char temp[1000];
int main()
{
	char str[1000];
	char str1[105];
	int q,m;
	int a,b;
	int k;
	scanf("%d",&q);
	scanf("%s",str);
	for(int i=0;i<q;i++)
	{
		scanf("%d",&m);
		if(m==1)//后接插入,在文档后面插入字符串str1,并输出文档的字符串;
		{
			scanf("%s",str1);
			strcat(str,str1);//char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
			printf("%s\n",str);
		}
		else if(m==2)//截取文档部分,只保留文档中从第 a 个字符起 b 个字符,并输出文档的字符串
		{
			scanf("%d%d",&a,&b);
			str[a+b]='\0';
			strcpy(temp, &str[a]);//char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制粘贴到 dest。
			//需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况.
			strcpy(str, temp);
			printf("%s\n",str);
		}
		else if(m==3)
		{//插入片段,在文档中第a 个字符前面插入字符串 str,并输出文档的字符串;
			scanf("%d%s",&k,temp);
			strcat(temp,&str[k]);
			str[k]='\0';//在字符串最后加一个0字符,表示字符串的结束。
			strcat(str, temp);
			printf("%s\n",str);
		}
		else if(m==4)//查找子串,查找字符串str,在文档中最先的位置并输出;如果找不到输出 −1
		{
			int flag=0;
			char s[1000]={0};
			scanf("%s",temp);
			for(int i=0;str[i]!='\0';i++)
			{
				if(str[i]==temp[0])
				{
					for(int j=0;j<strlen(temp);j++)
					{
						s[j]=str[i+j];
					}
					if(strcmp(s,temp)==0)//功能:比较字符串s和temp。一般形式:strcmp (字符串1,字符串2)当s
					{
						printf("%d\n",i);
						flag++;
						break;
					}
				}   
			}
			if(!flag) printf("-1\n");
		}
	}
}

P5737 【深基7.例3】闰年展示

https://www.luogu.com.cn/problem/P5737

#include
int main(void)
{
	int x,y,i,t,num=0;
	while(scanf("%d %d",&x,&y)!=EOF)
	{
		if(x>y)
		{
			t=x;
			x=y;
			y=t;
		}
	for(i=x;i<=y;i++)
	{
		if((i%4==0&&i%100!=0)||i%400==0)
		{
			num++;
		}
	}
		printf("%d \n",num);
	for(i=x;i<=y;i++)
		{
			if((i%4==0&&i%100!=0)||i%400==0)
			{
			printf("%d ",i);
			}
		}
	}
	printf("\n");
}

# P5739 【深基7.例7】计算阶乘
>https://www.luogu.com.cn/problem/P5739
```c
#include
#include
long long jie_cheng(int n);
int main()
{	
		int num;
		long long y;
		scanf("%d",&num);
		y=jie_cheng(num);
		printf("%lld\n",y);
		return 0;
}
long long jie_cheng(int n)
{
	long long fValue;
	if(n<0) exit(-1);
	if(n>=0)
	{
		if(n==0||n==1) fValue=1;
		else fValue=n*jie_cheng(n-1);
	}
	return fValue;
}

你可能感兴趣的:(c语言)