XTU C语言程序设计实践作业5

2.XTU方阵

eXtreme Talent UniversityXTU)需要为他们的校名打印一些特别的图形,为了美观,他们选择了方阵。现在他们需要你的帮助,帮他把这些方阵打印出来。如果方阵一边只由一个XTU的校名组成,则方阵为:

XTU

XTU

XTU

输入

       每个样例占一行,每行是一个整数n0<=n<=10),表示一行需要使用多少个校名,n0是输入结束标志。

输出

       对于每个样例,先输出样例序号,比如说第一个样例输出“Case 1:”,换行再输出对应样例的方阵,每个方阵后有一个空行。


这个题主要是用到循环和换行的问题,讲一下嵌套循环

 for(i=0;i<3*n;i++)
    {
     for(j=0;j      {
         printf("XTU");
     }
     printf("\n");
    }

循环的第一个for()主要是控制有多少行,第二个for就是对行进行操作,那个printf()就是对每一行操作完之后换下一行

其他的没什么好说的了,代码如下

#include
int main()
{
  int i,j;
  int n,count=0;
  while(scanf("%d",&n))
  {
    if(n==0)
    return 0;
    count++;
    printf("Case %d:\n",count);
    for(i=0;i<3*n;i++)
    {
     for(j=0;j      {
         printf("XTU");
     }
     printf("\n");
    }
    printf("\n");
  }
}


3.

数字塔

有多个输入测试用例,每个用例一行,是一个1-9的整数,输入为0则结束。

请输出一个数字塔,若输入是4,则输出的数字塔为:

   1

  222

 33333

4444444

因为有多个样例,那么样例需要先输出一行"case 样例号:"

比如第一个样例是3,则输出

case 1:

  1

 222

33333

这个题的话,和上个题一样,是一个嵌套循环,但是比上一个题要复杂

我们把循环语句摘出来分析一下

for(i=0;i     {
     for(j=i;j      printf(" ");
     for(j=0;j<2*i+1;j++)
     {
          printf("%d",i+1);
     }
     printf("\n");
    }

首先行数和n挂钩,所以最外层循环肯定是for(i=0;i

然后就是关于空格的问题了,空格随着行数的增加而减少,而且是n-1的线性关系,所以是for(j=i;j

又由于后来i增大所以格越来越少

行的问题解决了然后我们看每一行的输出,第一行输出一个1,第二行输出3个2,第三行输出5个3,所以输出数量是2*i+1的关系,然后输出的内容是什么,当然是和i挂钩

printf(“%d”,i+1),最后每行输出完毕之后你还要使用换行符来开启下一行,代码如下


#include
int main()
{
  int i,j;
  int n,count=0;
  while(scanf("%d",&n))
  {
    if(n==0)
    return 0;
    count++;
    printf("case %d:\n",count);
    for(i=0;i     {
     for(j=i;j      printf(" ");
     for(j=0;j<2*i+1;j++)
     {
          printf("%d",i+1);
     }
     printf("\n");
    }
  }
}


6.

日期

Description

给出一个日期,请计算这天是这一年的第几天? 输入 第一行是一个整数N,表示样例的个数,以后每行一个日期,日期格式满足“YYYY-MM-DD”的格式(即年4位,月2位,日期2位)。 输出 每行输出一个整数,即第几天,输入保证日期的合法性。
 

Sample Input

3
2000-02-29
2001-02-01
2001-02-28
 

Sample Output

60
32
59

这个题重要的就是要用到二维数组和自定义创建一个函数

这里的二维数组a[2][12]表示一个两行12列的一个数组

而创建的函数riqi()就是一个普通的函数创建过程,包括定义啊,设置变量,返回函数值之类的

还有就是在进行日期的加法上那个循环的次数使用了morth-1,大家可以仔细看一下为什么


#include
int riqi(int year,int morth,int day)
{
  int i;
  int sumday=0;
  int a[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
  int b = (year%4==0&&year%100!=0)||(year%400==0);
  for(i=0;i   {
    sumday += a[b][i];
  }
    sumday=sumday+day;
  return sumday;
}
main()
{
  int a,b,c;
  int i,n;
  int sum=0;
  scanf("%d",&n);
  while (n--)
  {
      scanf("%d-%d-%d",&a,&b,&c);
      sum= riqi(a,b,c);
      printf("%d\n",sum);
  }
}



8.

平方数

Description

描述

       给你一个整数集合A(无重复元素),如果x,y都属于A,且y=x*x,那么组成一个数对,请找出这个集合中满足条件的数对的个数。比如说集合A={234},则只有4=2*2,则答案为1

输入

       每个样例占2行,第一行为一个非负整数nn<=1000,为集合中元素的个数,如果n0则输入结束。第二行为n个整数,为集合的元素,所有的元素为非负整数,且<=100,000,000,两个整数之间有一个空格隔开。

输出

       每行输出一个样例的结果。

 

Sample Input

32 3 453 36 5 9 60
 

Sample Output

12

这个题主要是首先把一个集合的数的平方数用数组储存起来然后通过循环把数组a[]和数组b[]进行比较,就是在做这个题的时候对于while (scanf("%d",&n))输入输出忘记了只写了

scanf("%d",&n),这是个多样例输入这样只能有一个样例

代码如下 

#include
main()
{
 int n;
 int i,j;
 int a[1001],b[1001];
 while (scanf("%d",&n))
 {
     if(n==0)
     return 0;
     int count =0;
     for(i=0;i  {
   scanf("%d",&a[i]);
   b[i]=a[i]*a[i];
 }
 for(j=0;j  {
    for(i=0;i     {
        if(a[i]==b[j])
        count++;
    }
 }
 printf("%d\n",count);
}
 }


剩余的题目以后再更新!








你可能感兴趣的:(XTU,C语言程序设计实践作业)