#include<stdio.h>
main()
{
int a,b,sum;
scanf("%d %d",&a,&b);
sum=a*b-a-b;//简单算法
printf("%d\n",sum);
return 0;
}
算法二
#include<stdio.h>
#define N 50000
int a[N]; //开一个长为N的数组,用于记录
void scaning(int m, int n) //扫描,看某个数字是否是m和n的某个组合的结果,是的话记为1
{
int i, j;
{
int i, j;
//为了减少一些无谓的循环,(N/m)*m已经不小于N了,所以N/m之后的数字就不用继续循环了
for(i=0; i<=N/m; i++)
{
//同理,由i*m + j*n < N得,只要j不小于(N-m*i)/n,j*[(N-m*i)/n]就可以达到N了
for(j=0; j<=(N-m*i)/n; j++)
{
if(i*m + j*n < N)
a[i*m + j*n] = 1;
}
}
}
for(i=0; i<=N/m; i++)
{
//同理,由i*m + j*n < N得,只要j不小于(N-m*i)/n,j*[(N-m*i)/n]就可以达到N了
for(j=0; j<=(N-m*i)/n; j++)
{
if(i*m + j*n < N)
a[i*m + j*n] = 1;
}
}
}
//统计,如果出现连续至少minimum个1,就说明后面的数字都是可以被m、n组合出来的
int counting(int minimum)
{
int i;
int times = 0;
for(i=0; i<N; i++)
{
if(a[i] == 1)
times++;
else
times = 0;
int counting(int minimum)
{
int i;
int times = 0;
for(i=0; i<N; i++)
{
if(a[i] == 1)
times++;
else
times = 0;
if(times == minimum)
return i - minimum; //返回第一组至少四个连续的1之前的那个数
}
return -1; //如果找不到,就返回-1
}
return i - minimum; //返回第一组至少四个连续的1之前的那个数
}
return -1; //如果找不到,就返回-1
}
int main()
{
int m, n;
scanf("%d%d", &m, &n);
scaning(m, n);
printf("%d\n", counting(m < n ? m : n)); //传给counting较小的数
return 0;
}
{
int m, n;
scanf("%d%d", &m, &n);
scaning(m, n);
printf("%d\n", counting(m < n ? m : n)); //传给counting较小的数
return 0;
}