第五次测试

                     第五次测试

1184    输出四位完全平方数

Description

输出所有形如aabb的四位完全平方数(即前2位数字相等,后2位数字相等,且是另外一个小于该数的整数的平方)

Input

没有输入

Output

按照从小到大输出4位完全平方数

Sample Input

 

Sample Output

 

Source


一:源代码

#include<stdio.h>
int main()
{
	int n,i,j;
	n=10000;
	for(i=1000;i<n;i++)
	{
		if(i/1000==((i/100-(i/1000)*10))&&(i/10-(i/100)*10)==(i-(i/10)*10))
		{
			for(j=1;j<i;j++)
			{
				if(i==j*j)
			printf("%d ",i);
			}
		}
	}
	return 0;

}


二:结果截图:



三:思路和感受

   这个题目不难,主要是 前2位数字相等,后2位数字相等, 这个条件的实现,因为我定义的i是int 型,所以i%10后剩下的肯定是前三位,再乘以10后,在被原数减,得到的肯定就是最后一位,同样的想法,就能表示出前两位相等,后两位相等了。

      而  是另外一个小于该数的整数的平方  这个条件,只要运用循环即可。



1184  字符串整理

Description

输入一个字符串,将字符串中所有非英文字母的字符删除后输出。

Input

多组测试数据,每组输入一个以回车结束的字符串

Output

将这行字符中所有非英文字母的字符删除后输出

Sample Input

I Have 2 MP3.
please you declare the variable m_n_DLength10!

Sample Output

IHaveMP
pleaseyoudeclarethevariablemnDLength

Source


一:源代码

#include<stdio.h>

#include<string.h>

int main()

{

char a[10000];

 int i,n;

 while(gets(a))

 {

 n=strlen(a);

 for(i=0;i<n;i++)

  {

if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))

   printf("%c",a[i]);

  }

  printf("\n");

 }

 return 0;

}


二:结果截图



三:思路和感受

   这个题目开始的时候还真没想到怎么做,以回车键结束以前做过,用while(gets(a))就可以了,后来才想到只要输入的字符在a到z或者A到Z之间再一个个输出,其他的不输出就可以了,开始的时候还真没想出来。,但是第一次提交的时候说表达错误,后来才发现最后忘记加入 printf("\n");来换行了,加入后就通过了。



1187  查找最大元素

Description

对于输入的每个字符串,查找其中的最大字母,在该字母后面插入字符串“(max)”。

Input

输入数据包括多个测试实例,每个实例由一行长度不超过100的字符串组成,字符串仅由大小写字母构成。

Output

对于每个测试实例输出一行字符串,输出的结果是插入字符串“(max)”后的结果,如果存在多个最大的字母,就在每一个最大字母后面都插入"(max)"。

Sample Input

abcdefgfedcba
xxxxx

Sample Output

abcdefg(max)fedcba
x(max)x(max)x(max)x(max)x(max)

Source


一:源代码

#include<stdio.h>

#include<string.h>

int main()

{

     char s[101];

      int i,n;

      char max;

      while(gets(s))

     {

         max='A';

            n=strlen(s);

            for(i=0;i<n;i++)

           {

                   if(max<s[i])max=s[i];

            }

            for(i=0;i<n;i++)

           {

                    if(s[i]==max)printf("%c(max)",s[i]);

                   else 

                          printf("%c",s[i]);

             }

             printf("\n");

 }

    return 0;

}


二:结果截图



三:思路和感受

    开始有规定个max为A,最大的,然后针对输入的字符串中的每个字符,一一计较,然后找出最大的那个字母,在然后在一个个输出的时候,在最大的字母后面加上(max)就可以了,最后不能忘记换行。

     开始写的时候,定义的最大的max为a,结果不管改了多少次,定义char或者int ,结果都不对,后来才发现如果这样定义的话求的就是最小的,而不是最大的,毕竟我输入的都是小写字母,肯定最开始定义max的应该为A,修改过后就可以通过了。



1186  找出一个数组中出现次数最多的那个元素

Description

找出一个数组中出现次数最多的那个元素

Input

第一行输入一个整数n(不大于20) 
第二行输入n个整数,

Output

找出n个整数中出现次数最多的那个整数

Sample Input

4
1 2 2 3

Sample Output

2

Source



一:源代码

#include<stdio.h>

int main()

{

            int n,i,j,m,a[20],b[20]={0};

           while(scanf("%d",&n) != EOF) 

            {

                   for(i=0;i<n;i++)

                   scanf("%d",&a[i]);

                  for(i=0;i<n;i++)

                           for(j=i+1;j<n;j++)

                          {

                                if(a[i]==a[j])

                                 b[i]++;

                          }

                for(i=0;i<n;i++)

                            {

                                    m=b[0];

                                     for(i=1;i<n;i++)

                                                if(b[i]>m)

                                                 m=b[i];

                                     for(i=0;i<n;i++)

                                           if(m==b[i])

                                              printf("%d\n",a[i]);

                              }

                        }

          return 0;

}


二:结果截图




三:思路和感受

    首先定义的这个b[20]是计数数组,并且初始化了,首先输入,然后一个个比较,如果有相同的,就用计数数组记一次,然后对计数数组运用循环,那个数字记下的次数最多,M就等于记下的次数,然后再次运用循环输出那个数字。

 这个题目难点就在于运用好计数数组。开始的时候这个地方b[i]++ ,写错了,写成了b[j]++,导致后来的计数有问题,

  最开始计数的时候,把for(i=0;i<n;i++)写成了for(i=0;i<n-1;i++),导致最后一个数字没有计入,结果发生问题,最后改过后还是不可以。

结果发现没有循环输入。 果然细心和合理的逻辑思维很重要。


    


1185  开灯问题

Description

计算中心有8个机房,每个机房有n台电脑。每台电脑都有一个编号,比如8号机房编号就为H1到Hn,我们有时又称为H1为1号机器,H2为2号机器,...。 
有一天我们学校跻身世界高校100强,全校所有师生都进行了狂欢庆祝。罗老师是个很爽快的人,也很喜欢喝酒,那天他喝多了点。但不巧的是那天晚上正好罗老师值班,罗老师是个很负责的老师。所以他就把8号机房打开了。但同学们都还在狂欢,没一个人来上机。罗老师提着一瓶酒,感觉到很无聊,所以他想玩个游戏。 
第一回合,他喝了一口酒,他把所有的电脑都打开。然后第二回合他喝了一口酒,他把编号是2,4,6,...的电脑全关了。第三回合,他喝一口酒后就去操作所有编号是3,6,9,...,看到电脑开着就把它关掉,看到电脑关了就把它打开。他重复这样操作共进行了n个回合。当他操作完最后一个回合后,罗老师醉倒了。 
现在给你这个机房电脑的数目,问你最后共有几台电脑开着?

Input

输入只有1行,这行有一个正整数,表示这个机房共有多少个电脑,该数是5到100之间的任意正整数。

Output

你必须输出最后开着的电脑数。输出该数后不要忘了换行。

Sample Input

5

Sample Output

2

Hint

for(i=1;i<=n;i++)//i表示回合1--n 
for(k=1;k<=n;k++)//k表示电脑编号1--n

Source


一:源代码

#include <stdio.h>

#include <string.h>

int main() {

          int a[101];

          int sum;

          int i, j;

         memset(a, 0, sizeof(a));

         for(i = 2; i <= 100; i++) {

             for(j = 1; j * i <= 100; j++) {

                  a[i*j] = !a[i*j];  

             }

         }

        while(scanf("%d",&j) != EOF) {

               sum = 0;

               for(i = 1; i <= j; i++) {   

                     if(!a[i]) {

                             sum++;

                      }

                }

            printf("%d\n",sum);

          }

   return 0;

}


二:结果截图



三:思路和感受

    老实说我认为这个题目是这次最难的一个,我根本就不能理解,后来还是请教了他们的,

首先先用memset(a, 0, sizeof(a));开辟空间,把这个数组初始化,然后把每个电脑的状态都记成相反的,这个时候运用的是i*j,因为电脑状态还和回合数有关。最后查找,如果有电脑开着,就把SUM 加1,最后输出sum。



1189  排队

Description

工地大学幼儿园有n个小朋友,他们每天都会按顺序排队打饭。 
他们打饭的顺序是按年龄从小到大排队。 
现在给出n个小朋友的年龄,请你输出他们的先后顺序。

Input

输入包含多组测试数据,对于每组测试数据: 
第一行输入一个正整数n ( 1 < n < 1000000 ),表示有n个人 
第二行包含a1....an,n个整数,任意0 < i < n保证0 < ai < 1000000 

输入n为0表示结束

Output

输出他们排队后的结果,每个结果占一行。

Sample Input

5
3 7 11 9 8
0

Sample Output

3 7 8 9 11

Hint

冒泡排序,选择排序会超时,大家可以学着使用函数库中的qsort()函数或者sort()函数

Source

Maxer @ HBUT ACM Team



一:源代码

#include <stdio.h>
#include <stdlib.h>
int compare (const void * a, const void * b) 

 return ( *(int*)a - *(int*)b );
}
int main()
{
int i,n,m,a[100000];  
  while(scanf("%d",&n)!=EOF)
  {
 if(n == 0) break;
 for(i=0;i<n;i++)
 scanf("%d",&a[i]);    
 qsort (a, n, sizeof(int), compare);
  for (i=0; i<n; i++)
     printf ("%d ",a[i]);
    printf("\n");
  }
  return 0;
}


二:结果截图



三:思路和感受

    这个题目下面的建议让我有点无语,冒泡排序,选择排序会超时,大家可以学着使用函数库中的qsort()函数或者sort()函数,因为我们还没有学过这两种函数,百度之后才了解,int compare (const void * a, const void * b)  return ( *(int*)a - *(int*)b );}这个就是计较,

 qsort (a, n, sizeof(int), compare);而这个是qsort使用的一般形式,定义的数组a,然后运用这个排序函数,然后在输出即可,

        第一次没过是输入0就结束这个条件没写,
 if(n == 0) break;,当然这里的break换成continue也是可以的。

       这个题目重点是在于掌握qsort和sort这两种排序函数的用法。



     这次的题目有点难度,特别是最后的3个题目,有用到新函数的,有用到计数数组的,有复杂的开灯问题的,总之,想要做对ACM上面的题目,还是需要多下功夫的。


 



  






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值