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