问题 A: XY1.加法变乘法(by YAN)
时间限制: 10 Sec 内存限制: 256 MB提交: 20 解决: 10
[ 提交][ 状态][ 讨论版]
题目描述
已知X可以写成从1开始连续若干个整数的和, 现在要求把其中两个不相邻的加号变成乘号,使得结果为Y。找出所有满足条件的可能答案并输出(把两个乘号左边的数字用小括号括起来,中间用英文逗号间隔,两个括号之间不空格);若找不到满足的条件,则输出“NONE”字样。编写程序,完成n组数据的判定。
例如:当X为1225,Y为2015时
因为:1+2+3+ ... + 49 = 1225
1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015
所以:一个解为(10,27)。
输入
第一行为n值,接下来依次n行的第一个数据是加法结果X,第二个数据是变乘法后的结果Y,以空格间隔。
输出
输出n行,每一行的格式为“(***,***)(***,***)”(或者“NONE”)。请严格按照格式书写,不能出现其它文字或符号。
样例输入
3 1225 2015 1224 2015 1275 2065
样例输出
(10,27)(16,24) NONE (10,27)(16,24)
提示
#include<stdio.h>
#include<string.h>
#include<math.h>
#define INF 999999
int my_max(int x ,int y) {return x>y?x:y; }
int my_min(int x ,int y) { return x>y?y:x;}
int main()
{
int n,m,i,i1,j,k,flag;
int a[1000],b[1000];
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d %d",&a[i],&b[i]);
for(i1=1;i1<=n;i1++)
{
flag=0;
k=(int)sqrt(a[i1]*2);
for(j=k;j>=1;j--)
{
if(j*(j+1)==a[i1]*2)
{
m=j;
break;
}
}
for(i=1;i<=m-1;i++)
{
for(j=i+2;j<=m-1;j++)
{
if(i+1==j||i-1==j) continue;
int t=a[i1]-2*i-1+i*(i+1)-2*j-1+j*(j+1);
if(t==b[i1])
{
printf("(%d,%d)",i,j);
flag=1;
}
}
}
if(flag==0)
printf("NONE");
if(i!=n) printf("\n");
}
return 0;
}
问题 B: XY2.格式打印(by YAN)
时间限制: 10 Sec 内存限制: 256 MB提交: 3 解决: 2
[ 提交][ 状态][ 讨论版]
题目描述
编写程序实现将一段文章格式化打印出来。打印时每行的长度为20个字符。
输入
该段文章长度<=500,单词的数量<=100。
以回车作为该段文章的输入结束。
输出
如果一行的最后一个单词超过了本行的20个字符的范围,则应把它移到下一行;
如果某行仅一个单词,则在该单词结束处直接换行;
否则在每行最后一个单词前增加一些空格,以便使每行的末尾准确地显示在第20个位置处。
如果某行仅一个单词,则在该单词结束处直接换行;
否则在每行最后一个单词前增加一些空格,以便使每行的末尾准确地显示在第20个位置处。
样例输入
The relationship between XML functional dependencies and XML keys are also discussed.
样例输出
The relationship between XML functional dependencies and XML keys are also discussed.
提示
#include<stdio.h>
#include<string.h>
#include<math.h>
#define INF 999999
int my_max(int x ,int y) {return x>y?x:y; }
int my_min(int x ,int y) { return x>y?y:x;}
int main()
{
int len,flag1,flag2,i,j,k,n,sum,num;
char str[505];
char dc[105][100];
int dclen[105];
k=0;
j=0;
gets(str);
len=strlen(str);
for(i=0;i<len;i++)
{
if(str[i]!=' ')
{
dc[j][k]=str[i];
k++;
}
else
{
k=0;
j++;
}
}
n=j+1;
for(i=0;i<n;i++)
{
dclen[i]=strlen(dc[i]);
}
flag1=0;
sum=0;
while(1)
{
flag2=-1;
if(sum!=1) sum=0;
for(i=flag1;i<n;i++)
{
sum+=dclen[i];
if(sum>20)
{
flag2=i;
break;
}
sum++;
}
if(flag2==-1)
flag2=n;
if(flag2-flag1==1)
{
printf("%s",dc[flag1]);
sum=1;
}
else
{
num=21;
for(j=flag1;j<flag2;j++)
{
num-=dclen[j];
num--;
}
for(j=flag1;j<flag2-1;j++)
printf("%s ",dc[j]);
for(j=1;j<=num;j++)
printf(" ");
printf("%s",dc[flag2-1]);
}
if(flag2!=n)
printf("\n");
flag1=flag2;
if(flag2==n)
break;
}
return 0;
}