1057 XTU方阵
1、 题目分析
这是一个比较典型的图形输出题目,在期末考试中必定会考一道这种类型的图形输出题,对于图形输出题目,往往都是通过寻找图形构造的规律来实现输出。在此题中,可以发现以下规律,当n=1时,图形共3(13)行,每行1(与n相等)个xtu;当n=2时,图形共6(23)行,每行2(n)个xtu;由此,可以发现规律,输入一个n,就会有3*n行输出,每行n个xtu。找出规律以后,用代码实现输出就好了。别忘记图形之间有一个空行哦。
2、参考代码
#include<stdio.h>
int main()
{
int i,j,n,k=1; //k用来记录图形是第几个,便于进行输出Case
while(scanf("%d",&n)!=EOF) //实现多样例
{
if(n==0) break; //0是输入结束标志
printf("Case %d:\n",k); //图形要求有case的输出
for(i=0;i<3*n;i++) //控制行,共有3*n行
{
for(j=0;j<n;j++) //控制每行有几个xtu,每行共n个xtu
{
printf("XTU");
}
printf("\n"); //输出一行就要换行
}
printf("\n"); //图形之间有一个空行别忘记了
k++; //图形是第几个的计数器
}
return 0;
}
1077 数字塔
1、 题目分析
这个题也是一个图形输出题,主要也是找规律。我们用i表示行数,用j表示列数,括号里是在解释数字内在规律。当输出一个n以后。n=2时: 图形共有2(与n相同)行,第1(i=1)行有1(n-i)个空格,输出1(与i相同)个1,第2(i=2)行有0(n-i)个空格,输出3(2i-1)个2; 当n=3时 图形共有3(与n相同)行,第1(i=1)行有2(n-i)个空格,输出1(2i-1)个1(与i相同),第2(i=2)行有1(n-i)个空格,输出3(2i-1)个2(与i相同),第3(i=3)行有0(n-i)个空格,输出了5(2i-1)个3(与i相同).
2、参考代码
#include<stdio.h>
int main()
{
int i,j,k,m,n;
k=1;
while(scanf("%d",&n)!=EOF) //多样例的输入
{
if(n==0) break; //n为0时需要结束
printf("case %d:\n",k); //图形是第几个
for(i=1;i<=n;i++) //控制行数
{
for(j=1;j<=n-i;j++) //图形空格的规律
{
printf(" ");
}
for(j=1;j<=2*i-1;j++) //图形输出的每行内容的规律
{
printf("%d",i);
}
printf("\n"); //输出完一行就得记得换行
}
k++;
}
return 0;
}
1078 字母三角形
1、 题目分析
这个题是一个标准的图形输出题,解答此类题往往都是需要通过采取寻找规律的方式,在找到规律后,我们常常可以采取依次输出的方式来解决问题。在这个题目中,每行可以先考虑输出前半部分,即输出由字母’A’到输入的字母。再考虑每行输入由输入的字母到“A”.这是一种比较实用的技巧,即分而治之,一点点完成,一点点考虑。
2、参考代码
#include<stdio.h>
int main()
{
int i,j,k,m,n;
m=1; //记录图形是第几个
char a,c;
while(scanf(" %c",&c)!=EOF&&c!='#') //多样例输入且不为 #
{
printf("case %d:\n",m); //输出图形是第几个
k=c-64; //由规律可知行的数目等于字母在字母表中的位置(第几个字母)
for(i=k;i>=1;i--)
{
for(j=0;j<k-i;j++) //空格输出
{
printf(" ");
}
for(a='A';a<='A'+i-1;a++) //先输出从‘A’到c所代表字母的部分
{
printf("%c",a);
}
for(a=a-2;a>='A';a--) //再输出从c所代表的字母到‘A’的部分
{
printf("%c",a);
}
printf("\n"); //输完一行就换个行
}
m++;
}
return 0;
}
1112 三点共线
1、 题目分析
高中数学知识的考察,判断三点共线的方法可以用向量的思考方式,但是为了避免出现分母为0的情况,我们将除变为乘好了。
2、参考代码
#include<stdio.h>
int main()
{
int x[3];
int y[3];
int n;
scanf("%d",&n);
while(n--)
{
scanf("%d %d",&x[0],&y[0]);
scanf("%d %d",&x[1],&y[1]);
scanf("%d %d",&x[2],&y[2]);
if((y[1]-y[0])*(x[2]-x[0])==(y[2]-y[0])*(x[1]-x[0]))
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}
1113 区间相交
1、 题目分析
在判断区间相交的时候,细细分析一下可知,【a,b】与【c,d】不相交的时候必然有c>b或者a>d;其余情况则必为相交的情况。
2、参考代码
#include<stdio.h>
int main()
{
int x[2],y[2];
int n;
scanf("%d",&n);
while(n--)
{
scanf("%d %d",&x[0],&y[0]);
scanf("%d %d",&x[1],&y[1]);
if((x[1]>y[0])||(x[0]>y[1]))
{
printf("No\n");
}
else
{
printf("Yes\n");
}
}
return 0;
}
1118 方程的根
1、 题目分析
这个题目的话难度不是很大,主要就是考察了我们高中数学里函数系数分类讨论的知识,做题的时候需要注意的就是尽量要把所有的情况都得考虑进去,否则就会因为不严谨而出错。
2、参考代码
#include<stdio.h>
int main()
{
int k,m,a,b,c;
scanf("%d",&k);
while(k--)
{
scanf("%d %d %d",&a,&b,&c);
if(a==0)
{
if(b==0) //常数函数
{
if(c==0) //a,b,c均为0时有无穷个解
{
printf("INF\n");
}
else //a,b为0而c不为0则没有解
{
printf("0\n");
}
}
else //一元一次函数仅有一个解
{
printf("1\n");
}
}
else //一元二次函数
{
m=b*b-4*a*c; //计算表达式
if(m>0) printf("2\n");
else if(m==0) printf("1\n");
else printf("0\n");
}
}
return 0;
}
1189 Root
1、 题目分析
对这个题目来说,它的难度相对较大,难处就在于很容易缺少考虑某些情况,但是只要始终把握好计算过程中分母不为0和且最终解必须为非负整数这两点去做就好了。不然可能就会出错,仅仅就是因为自己缺少考虑了一些特殊的情况。
2、参考代码
#include<stdio.h>
int main()
{
int k,a,b,c,r,m,n,d,x;
scanf("%d",&k);
while(k--)
{
scanf("%d %d %d",&a,&b,&c);
m=a-b*c;
n=c-1;
if(c==0)
{
if(a==0&&b!=0) printf("0\n");
else printf("None\n");
}
else if(c==1)
{
if(a!=b) printf("None\n");
else if(a==0) printf("1\n");
else printf("0\n");
}
else
{
d=m*n;
r=m%n;
x=m/n;
if(m==0&&b!=0) printf("0\n");
else if(x<0) printf("None\n");
else if(r==0)
{
if(x!=(-b)) printf("%d\n",x);
else printf("None\n");
}
else printf("None\n");
}
}
return 0;
}
1255 勾股数
1、 题目分析
做这个题目的时候我们首先需要注意的一点就是这是一个三角形,那么我们三边就必须要满足三边关系,即两边之和大于第三边,通过采取有效区间内的元素搜索法,可以从小到大依次寻找,当找到一条满足勾股定理的边时,就立马结束搜索直接输出,这时找到的边毫无疑问就是满足条件的最小边。
2、参考代码
#include<stdio.h>
int main()
{
int x,y; //接收两条边的变量
int i,k;
scanf("%d",&k); //读入样例的个数
while(k--)
{
scanf("%d %d",&x,&y);
for(i=1;i<x+y;i++) //区间搜索法,在x+y内进行搜索,但不可以为x+y,三角形的三边关系要求的
{
if((i*i+x*x==y*y)||(i*i+y*y==x*x)||(x*x+y*y==i*i)) //进行判断,如果边长满足条件,那么就结束搜索,因为我们要找的是满足条件的最小边
{
break;
}
}
if(i==(x+y)) printf("None\n"); //当搜索结束后如果都没找到合适的边,那就意味着不存在合适边
else printf("%d\n",i); //搜索到了合适的边直接输出好了
}
return 0;
}