1274 Problem A十字架Time Limit:1000MS Memory Limit:65536KTotal Submit:5 Accepted:4Description现在给你一个7*7的正方形,让你来数一数这个正方形中有多少的十字架。一个十字形为一个十字架,多个个十字架可以相连。例如:
1274 Problem A
10字架
Time Limit:1000MS Memory Limit:65536K
Total Submit:5 Accepted:4
Description
现在给你1个7*7的正方形,让你来数1数这个正方形中有多少的10字架。1个10字形为1个10字架,多个个10字架可以相连。
例如:1 1 0 1 0 1 0
1 1 1 1 1 1 1
1 0 1 0 0 1 0
1 0 1 0 0 1 0
1 1 1 1 1 1 1
0 0 1 0 1 1 1
0 1 1 1 1 1 1
中有4个10字架。
Input
输入第1行有1个数T表示有T组测试数据。
接下来输入T个7行7列的1个正方形。
每行中的两个元素用空格隔开。
Output
每组输出数据有1个数代表有几个10字架,每组数据占1行。
Sample Input
2
1 1 0 1 0 1 0
1 1 1 1 1 1 1
1 0 1 0 0 1 0
1 0 1 0 0 1 0
1 1 1 1 1 1 1
0 0 1 0 1 1 1
0 1 1 1 1 1 1
0 1 0 1 0 1 1
1 1 1 1 1 1 1
0 1 1 1 0 1 1
1 0 1 1 0 1 1
1 1 0 0 0 0 1
1 1 1 1 1 1 1
0 1 0 0 1 0 1
Sample Output
4
5
Source
[Submit] [Go Back] [Status]
[Discuss]
#include<iostream>
using namespace std;
int main() {
int a[8][8]= {0};
int n;
cin>>n;
while(n--) {
for(int i=0; i<7; i++)
for(int j=0; j<7; j++)
cin>>a[i][j];
int count=0;
for(int i=1; i<6; i++)
for(int j=1; j<6; j++)
if(a[i][j⑴]==1&&a[i][j+1]==1&&a[i+1][j]==1&&a[i⑴][j]==1&&a[i][j]==1)count++;
cout<<count<<endl;
}
return 0;
}
1276 Problem B
找数
Time Limit:1000MS Memory Limit:65536K
Total Submit:180 Accepted:78
Description
很简单,下面有3个数n,m1,m2,就是让设计1个程序找出能被m1或被m2整除的个数。
Input
输入包括多组测试数据,每组数据占1行。
0〈n〈2^31,0〈m1,m2〈=10。
Output
[1,n)中能被满m1或m2整除的个数
每组数据输出占1行。
Sample Input
12 2 3
Sample Output
7
Source
[Submit] [Go Back] [Status]
[Discuss]
#include<iostream>
using namespace std;
int main() {
int a,b,c;
while(cin>>a>>b>>c) {
int d=0;
for(int i=1; i<a; i++)
if(i%b==0||i%c==0)
d++;
cout<<d<<endl;
}
return 0;
}
1277 Problem C
奇特的碰撞
Time Limit:1000MS Memory Limit:65536K
Total Submit:11 Accepted:4
Description
1天,1个生物学家发现了1种菌落碰撞的规律;他发现两个权重M1和M2的菌落碰撞在1起会变成权重为2*sqrt(M1*M2)新菌落,现在培养皿中有1批菌落;现在菌落中产生碰撞,求碰撞以后剩下最后的1个菌落的(最小)权重;
输入:
Input
第1行输入1个整数N,表示菌落的数量;随后有N个数表示菌落的权重;
Output
最后1个菌落的(最小)权重;结果保存3位小数;
Sample Input
3
72
30
50
Sample Output
120.000
Source
[Submit] [Go Back] [Status]
[Discuss]
#include <iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
double f(double n,double m) {
return 2 * sqrt(n * m);
}
using namespace std;
int main() {
int n,a[1001];
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
sort(a,a + n);
double s = f(a[n - 1],a[n - 2]);
for (int i = n - 3; i >= 0; i--)
s = f(s,a[i]);
printf("%.3lf",s);
return 0;
}
1279 Problem D
叠硬币的游戏
Time Limit:2000MS Memory Limit:65536K
Total Submit:17 Accepted:5
Description
小明把存钱罐里的硬币倒出来准备买东西,但是买东西之前小明想玩1个游戏,就是想把硬币叠成1样的高度,你需要算出最少需要移动的硬币数,假定初始的硬币是1层1层的叠好的;
输入
Input
多组测试数据,以EOF结束,第1行是1个n(1<=n<=50)表示有n堆硬币;
第2行是n个正整数k(1<=k<=100)表示每堆硬币的硬币数量
如果n==0运行结束。
Output
对每组输入数据有两行输出,第1行是1个Case #x,表示x组测试数据,第2行输出y.表示最小的移动砖块的数量为y,若无解就输出No solution
Sample Input
6
5 2 4 1 7 5
2
1 2
4
2 2 2 2
0
Sample Output
Case #1
5
No solution
Case #2
0
Source
[Submit] [Go Back] [Status]
[Discuss]
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int n,cas=0;;
while( cin>>n) {
if(n==0)break;
int a[1001],sum=0;
for(int i=0; i<n; i++) {
cin>>a[i];
sum+=a[i];
}
if(sum%n!=0) {
cout<<"No solution"<<endl;
continue;
} else {
int tt=sum/n,count=0;
sort(a,a+n);
for(int i=0; i<n,a[i]<tt; i++)
count+=tt-a[i];
cas++;
cout<<"Case #"<<cas<<endl;
cout<<count<<endl;
}
}
return 0;
}
1281 Problem E
奇怪的电话号码
Time Limit:3000MS Memory Limit:65536K
Total Submit:105 Accepted:58
Description
1天小明最近接到了1个辣手的任务,他们公司有1个电话簿.但是这是1个奇怪的电话簿,由于它不是用数字记录电话号码,而是用数字键上所对应的字母来记录电话号码(2-abc,3-def,4-ghi,5-jkl,6-mno,7-pqrs,8-tuv,9-wxyz),电话号码只有11位。现在你的任务就是帮小明写1个程序来把这些字母的电话号码转化成数字的电话号码。
Input
第1行输入1个正整数T(0每组测试数据只有1行,输入1串字符(字符长度为11);
Output
每组输出占1行,输出数字的电话号码
Sample Input
2
phqghumeayl
nlfdxfircvs
Sample Output
74744863295
65339347287
Source
[Submit] [Go Back] [Status]
[Discuss]
#include<iostream>
#include<string>
using namespace std;
int main() {
int n;
cin>>n;
while(n--) {
string s;
cin>>s;
for(int i=0; i<11; i++) {
if(s[i]=='a'||s[i]=='b'||s[i]=='c')cout<<"2";
if(s[i]=='d'||s[i]=='e'||s[i]=='f')cout<<"3";
if(s[i]=='g'||s[i]=='h'||s[i]=='i')cout<<"4";
if(s[i]=='j'||s[i]=='k'||s[i]=='l')cout<<"5";
if(s[i]=='m'||s[i]=='n'||s[i]=='o')cout<<"6";
if(s[i]=='p'||s[i]=='q'||s[i]=='r'||s[i]=='s')cout<<"7";
if(s[i]=='t'||s[i]=='u'||s[i]=='v')cout<<"8";
if(s[i]=='w'||s[i]=='x'||s[i]=='y'||s[i]=='z')cout<<"9";
}
cout<<endl;
}
return 0;
}
1283 Problem F
数据的处理
Time Limit:4000MS Memory Limit:65536K
Total Submit:13 Accepted:8
Description
小明先用计算机生成了N个1到1000之间的随机整数(0〈N≤1000),对其中重复的数字,只保存1个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,依照排好的顺序去找同学做调查。请你协助小明完成“去重”与“排序”的工作。
Input
输入有3行,第1行动1个正整数T(0第3行有N个用空格隔开的正整数,为所产生的随机数。
Output
输出是2行,第1行动1个正整数M,表示不相同的随机数的个数。第2行动M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
Sample Input
1
10
20 40 32 67 40 20 89 300 400 15
Sample Output
8
15 20 32 40 67 89 300 400
Source
[Submit] [Go Back] [Status]
[Discuss]
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int n;
cin>>n;
while(n--) {
int m,a[1001];
cin>>m;
for(int i=0; i<m; i++)
cin>>a[i];
sort(a,a+m);
int count=0;
for(int i=0; i<m; i++)
if(a[i]!=a[i+1])
count++;
cout<<count<<endl;
for(int i=0; i<m; i++)
if(a[i]!=a[i+1])
cout<<a[i]<<" ";
cout<<endl;
}
return 0;
}
1284 Problem G
最大值和序号
Time Limit:1000MS Memory Limit:65536K
Total Submit:142 Accepted:56
Description
输入n个整数,求这n个数的最大值和序号!
Input
输入n个整数
有多组数据
T a1 a2....at
...
Output
求这n个数的最大值和序号!
每组数据输出两行第1行动最大值,第2行动最大值所在的序号
Sample Input
3
1 2 3
4
1 2 3 3
Sample Output
3
2
3
2 3
Source
[Submit] [Go Back] [Status]
[Discuss]
#include<iostream>
using namespace std;
int main() {
int n;
while(cin>>n) {
int max=0,a[1001];
for(int i=0; i<n; i++) {
cin>>a[i];
if(a[i]>max)max=a[i];
}
cout<<max<<endl;
for(int i=0; i<n; i++)
if(a[i]==max)
cout<<i<<" ";
cout<<endl;
}
return 0;
}
1285 Problem H
集合差
Time Limit:1000MS Memory Limit:65536K
Total Submit:13 Accepted:10
Description
集合A-B被定义为由所有在A中但不在B中的元素组成的集合。例如A={1,2,3,4,5};B={2,4,6}则C=A-B={1,3,5}
Input
输入集合A和集合B
Output
输出集合C
Sample Input
5 1 2 3 4 5
3 2 4 6
Sample Output
3 1 3 5
Hint
数字已有序,集合的输出格式:集合长度 集合元素1.集合元素2.....
Source
[Submit] [Go Back] [Status]
[Discuss]
#include<iostream>
using namespace std;
int main() {
int a[1001],b[1001],m,n;
cin>>m;
for(int i=0; i<m; i++)
cin>>a[i];
cin>>n;
for(int i=0; i<n; i++)
cin>>b[i];
int k=0,j=0,c[1001];
for(int i=0; i<m; i++) {
if(a[i]!=b[j]) {
c[k]=a[i];
k++;
} else j++;
}
cout<<k;
for(int i=0; i<k; i++)
cout<<" "<<c[i];
cout<<endl;
return 0;
}
1286 Problem I
大写元音字母
Time Limit:1000MS Memory Limit:65536K
Total Submit:122 Accepted:73
Description
输入1个字符串(不含空格)你的任务是将其中的元音字母都转换成大写字母并将其输出!
Input
多组数据输入
每行长度不超过100
Output
输出转换后的单词
Sample Input
acm
icpc
Ahstu
Sample Output
Acm
Icpc
AhstU
Source
[Submit] [Go Back] [Status]
[Discuss]
#include<iostream>
#include<string>
using namespace std;
int main() {
string a;
while(cin>>a) {
for(int i=0; i<a.size(); i++) {
if(a[i]=='a')a[i]='A';
if(a[i]=='o')a[i]='O';
if(a[i]=='e')a[i]='E';
if(a[i]=='i')a[i]='I';
if(a[i]=='u')a[i]='U';
}
cout<<a<<endl;
}
return 0;
}
1282 Problem J
数的另外一种表示方法
Time Limit:4000MS Memory Limit:65536K
Total Submit:70 Accepted:45
Description
下面我们定义 f(A) = 1,f(a) = ⑴,f(B) = 2,f(b) = ⑵,... f(Z) = 26,f(z) = ⑵6;
给你1个x和1个数y;你需要求出y+f(x)的结果;
Input
第1行输入1个数t(0
Output
y+f(x)的结果;
Sample Input
6
R 1
P 2
G 3
r 1
p 2
g 3
Sample Output
19
18
10
⑴7
⑴4
⑷
Source
[Submit] [Go Back] [Status]
[Discuss]
#include<iostream>
using namespace std;
int main() {
int n;
cin>>n;
while(n--) {
char s;
int m;
cin>>s>>m;
if(s>='A'&&s<='Z')cout<<s⑹4+m<<endl;
if(s>='a'&&s<='z')cout<<-(s⑼6-m)<<endl;
}
return 0;
}