每日一练

目录

1.1

1147:题目描述

         给定两个整型数组,数组a有n个元素, 数组b有m个元素,1<=m<=n<100,请检验数组b是否是数组a的子数组。若从数组a的某个元素a[i]开始,有b[0]=a[i],b[1]=a[i+1],......,b[m]=a[i+m],则称数组b是数组a的子数组。

1.2 答案:

2.1

1148:题目描述 把1、2、3、4、5、6、7、8、9组合成3个3位数,要求每个数字仅使用一次,使每个3位数均为完全平方数。按从小到大的顺序输出这三个三位数。

2.2 答案:


1.1

1147:题目描述

给定两个整型数组,数组a有n个元素, 数组b有m个元素,1<=m<=n<100,请检验数组b是否是数组a的子数组。若从数组a的某个元素a[i]开始,有b[0]=a[i],b[1]=a[i+1],......,b[m]=a[i+m],则称数组b是数组a的子数组。

输入

输入第一行为两个整数n和m;第二行为数组a的n个整数;第三行为数组b的m个整数,各数据之间用空格隔开。

输出

输出占一行。若b是a的子数组,则输出子数组所在位置i,注意下标从0开始;否则输出“No Answer”。

1.2

答案:

(oj不过)

#include<stdio.h>
int main()
{
	int n,m,a[99999],b[99999],k,c=1,i,j;
	scanf("%d%d",&n,&m);
	for(i=0; i<n; i++)
		scanf("%d",&a[i]);
	for(i=0; i<m; i++)
		scanf("%d",&b[i]);
	for(i=0; i<n; i++)
	{
		if(b[0]==a[i])
		{
			k=i++;
			for(j=1; j<m; j++,i++)
				if(b[j]==a[i])
					c++;
			if(c==m)
			{
				printf("%d",k);
				break;
			}
			else
			{
				if(n-i>=m)
					c=1;
				else
				{
					printf("No Answer");
					break;
				}
			}
		}
	}
	return 0;
}

2.1

1148:题目描述

把1、2、3、4、5、6、7、8、9组合成3个3位数,要求每个数字仅使用一次,使每个3位数均为完全平方数。按从小到大的顺序输出这三个三位数。

输入

输出

按从小到大的顺序输出这三个三位数,由空格隔开。输出占一行。

2.2

答案:

#include<stdio.h>
int main()
{
	int x,y,z,m,n,a[99999],i=0,j,k;
	int g1,s1,b1,g2,s2,b2,g3,s3,b3;
	for(x=1; x<10; x++)
	{
		for(y=1; y<10; y++)
		{
			for(z=1; z<10; z++)
			{
				if(x!=y && x!=z && y!=z)
				{
					n=x*100+y*10+z;
					m=1;
					while (m*m<=n)
					{
						if (m*m==n)//从1开始,到平方和>n结束      平方和=n为符合条件 的数字(n)
							a[i++]=n;//找到所有符合条件的数字,存入数组a中
						m++;
					}
				}
			}
		}
	}
	for(i=i-1; i>1; i--)
	{
		fx(a,i);
		for(j=i-1; j>=0; j--)
		{
			fx(a,j);
			for(k=j-1; k>=0; k--)
				fx(a,k);
		}
	}
	return 0;
}
int fx(int a[],int n)
{
	static int x[11]= {0,1,2,3,4,5,6,7,8,9},k=1;
	int g,s,b,i,j;
	g=a[n]%10;
	s=a[n]/10%10;
	b=a[n]/100;
	for(i=1; i<11; i++)
	{
		if(g==x[i])
			x[i]--;
		if(s==x[i])
			x[i]--;
		if(b==x[i])
			x[i]--;
	}
	k++;
	if(k%3==0)
	{
		for(i=1; i<11; i++)
		{
			x[i]++;
			if(x[i]!=i)
				break;
		}
		if(i==11)
			printf("%d %d %d",a[k],a[j],a[i]);
		else
			for(i=1; i<11; i++)
				x[i]=i;
	}
}

ps:

答案都不对,原理不难,转化为代码就不会了emmm

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值