1.题目描述
对于表达式n2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x,y<=50),判定该表达式的值是否都为素数。
输入
输入数据有多组,每组占一行,由两个整数x,y组成,当x=0,y=0时,表示输入结束,该行不做处理。
输出
对于每个给定范围内的取值,如果表达式的值都为素数,则输出"OK",否则请输出“Sorry”,每组输出占一行。
样例输入
0 1
0 0
样例输出
OK
#include <stdio.h>
int main(void)
{
intx,y,i,j,k,sum,t;
while(scanf("%d%d",&x,&y)!=EOF)
{
sum=0;
if(x==0&&y==0)break;
for(i=x;i<=y;i++)
{
t=i*i+i+41;
k=1;
for(j=2;j*j<=t;j++)
{
if(t%j==0)
{
k=0;
break;
}
}
if(k)
sum++;
}
if(sum==y-x+1)
printf("OK\n");
else
printf("Sorry\n");
}
return0;
}
2.题目描述
已知元素从小到大排列的两个数组x[]和y[],请写出一个程序算出两个数组彼此之间差的绝对值中最小的一个,这叫做数组的距离。
输入
第一行为两个整数m, n(1≤m, n≤1000),分别代表数组f[], g[]的长度。第二行有m个元素,为数组f[]。第三行有n个元素,为数组g[]。
输出
数组的最短距离
样例输入
5 5
1 2 3 4 5
6 7 8 9 10
样例输出
1
提示
你能想出O(n+m)的算法吗?^_^
加油!
代码:
#include<iostream>
using namespace std;
int main()
{
intm,n,min,k;
int f[10000],g[10000];
cin>>m>>n;
for(int i =0;i<m;i++)
{
cin>>f[i];
}
for(int i=0;i<n;i++)
{
cin>>g[i];
}
if(f[0]>g[0])//初始化min
{
min=f[0]-g[0];
}
else
min=g[0]-f[0];
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(f[i]>g[j])
{
k=f[i]-g[j];
}
else
k=g[j]-f[i];
if(k<min)
{
min=k;
}
}
}
cout<<min;
}