目录
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])//第二个数组和第一个数组对比,寻找第一个数组中的 第二个数组的首个数字,b[0]==a[i]
{
k=i++;//k记录i的位置
for(j=1; j<m; j++,i++)//判定b[1]与a[i+1]...... b[m-1]与a[i+m-1]
if(b[j]==a[i])
c++;//计数,记录相等的个数,c初始为1(b[0]==a[i])
if(c==m)//相等的数字==b数组的数字
{
printf("%d",k);
break;
}
else
{
if(n-i>=m)//判定a数组后续数字长度,如果>=b数组长度,还存在包含b数组的可能性
{
c=1;
i=k+1;//判定位置修改
}
else
{
printf("No Answer");
break;
}
}
}
}
return 0;
}
(oj通过)
#include<stdio.h>
int main()
{
int n,m,a[100],b[100],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++)
{
for(j=0; j<m&&i<n&&b[j]==a[i]; j++,i++);
//如果a,b数组都没有结束,并且 b[j]==a[i],继续向后比较
if(j==m){//如果j==m则b数组比较完了都相等
printf("%d",i-j);
break;
}
}
//如果i==n&&j<m则a数组结束, 但是b数组没结束
if(i==n&&j<m)
printf("No Answer");
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],b[9],i=0,j,k;
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中
printf("%d\n",a[i-1]);
}
m++;
}
}
}
}
}
for(i=i-1, x=0; i<=2; i--)
{
b[x++]=a[i]%10;
b[x++]=a[i]/10%10;
b[x++]=a[i]/100;
for(j=i-1; j<=1; j--)
{
b[x++]=a[j]%10;
b[x++]=a[j]/10%10;
b[x++]=a[j]/100;
for(k=j-1; k<=0; k--)
{
b[x++]=a[k]%10;
b[x++]=a[k]/10%10;
b[x++]=a[k]/100;
if(fx(a,b)==1)
{
printf("%d %d %d",a[k],a[j],a[i]);
y=0;
break;
}
}
if(y==0)
break;
}
if(y==0)
x=0;
}
return 0;
}
int fx(int a[],int b[])
{
int i,j,k;
for(i=0; i<9; i++)
for(j=i+1; j<9; j++)
if(a[i]!=a[j])
k++;
if(k==36)
return 1;
else
return 0;
}