《C语言程序设计》作业4-循环结构2

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;
}

大可爱,你在我心里真的很重要,这就是痴情的我~

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42987451/article/details/82772899
今日推荐