第五次测试
1184 输出四位完全平方数
Description
输出所有形如aabb的四位完全平方数(即前2位数字相等,后2位数字相等,且是另外一个小于该数的整数的平方)
Input
没有输入
Output
按照从小到大输出4位完全平方数
Sample Input
Sample Output
Source
一:源代码
#include
int main()
{
int n,i,j;
n=10000;
for(i=1000;i
二:结果截图:
三:思路和感受
这个题目不难,主要是 前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
#include
int main()
{
char a[10000];
int i,n;
while(gets(a))
{
n=strlen(a);
for(i=0;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
#include
int main()
{
char s[101];
int i,n;
char max;
while(gets(s))
{
max='A';
n=strlen(s);
for(i=0;i
{
if(max
}
for(i=0;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
int main()
{
int n,i,j,m,a[20],b[20]={0};
while(scanf("%d",&n) != EOF)
{
for(i=0;i
scanf("%d",&a[i]);
for(i=0;i
for(j=i+1;j
{
if(a[i]==a[j])
b[i]++;
}
for(i=0;i
{
m=b[0];
for(i=1;i
if(b[i]>m)
m=b[i];
for(i=0;i
if(m==b[i])
printf("%d\n",a[i]);
}
}
return 0;
}
二:结果截图
三:思路和感受
首先定义的这个b[20]是计数数组,并且初始化了,首先输入,然后一个个比较,如果有相同的,就用计数数组记一次,然后对计数数组运用循环,那个数字记下的次数最多,M就等于记下的次数,然后再次运用循环输出那个数字。
这个题目难点就在于运用好计数数组。开始的时候这个地方b[i]++ ,写错了,写成了b[j]++,导致后来的计数有问题,
最开始计数的时候,把for(i=0;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
#include
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
#include
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
qsort (a, n, sizeof(int), compare);
for (i=0; 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上面的题目,还是需要多下功夫的。