SDKD ACM协会第一次培训题目

A - 单词统计

请统计给出的字符串中有多少个单词。

Input
多组测试数据。第一行输入一个整数T表示测试样例的组数。

接下来的T行每行输入一个长度小于10000的字符串(仅由空格和英文字母组成,且有可能是空串)。

Output
对于每组数据输出一个整数,表示该字符串中单词的总数。

Sample Input
1

I am an acmer

Sample Output
4

#include<iostream> 
#include<cstdio>
#include<cstring>
using namespace std;

int main() {
	char s[10002],c; int T,Ans;
	cin>>T;scanf("%c",&c);
	while(T--) {
		gets(s);
		Ans = 0;
		int len = strlen(s),i=0;
		//printf("len = %d\n",len);
		while(i<=len-1) {
			if(s[i] != ' ') {
				Ans++;
				while(s[i] != ' ') i++;
			}
			while(s[i] == ' ') i++;
		}
		printf("%d\n",Ans);
	}
	return 0;
}

题解 : 注意到那个scanf(“%c”)了吗 他用来处理T之后的换行符,不然第一遍循环的额gets会读取换行符。。。。。gg





B - 个位数

已知a和b,求出a^b的个位数。
Input
输入包含多组测试用例。
每组测试用例,包含两个数组a和b(0<a,b<=2^30)。
Output
对于每组测试用例,你需要输出a^b的个位数。
Sample Input
7 66 8 800
Sample Output
9 6

#include<iostream>
#include<cstdio>
#include<cstring>
#define Maxn 10901
using namespace std;
int modle[Maxn];
int main() {
	int a,b,p,num;
	while(scanf("%d %d",&a,&b) == 2) {
		memset(modle,0,sizeof(modle));
		p = 3;
		modle[1] = a % 10;
		num = modle[1];
		modle[2] = num * modle[1] % 10;
		while(modle[p-1] != num && (p-1) <= b) {
			modle[p] = (modle[p-1] * num) % 10;
			p++;
		}
		p -= 2;
		//printf("P=%d\n",p);
		//for(int i=1;i<=p;i++) printf("%d ",modle[i]);
		//printf("\n"); 
		b %= p; if(b==0) b+=p;
		printf("%d\n",modle[b]);
	}
	return 0;
	
} 

题解: 题目不难,找循环节,而已,因为p=3开始做,特别注意一下b=3的情况,刚开始代码框架都写出来了,一直都在WA,后来找到问题是(p-1)<=b 而不是 p <=b
反思: 也许没改之前上交OI赛制可以拿不少分,但是现在我面对的是ACM,90分和0分都是一样的,只有对和不对两种情况,以后考虑问题还是要仔细,全面!!!!!小心谨慎!!!!

总结: 昨天是周天ACM队里组织了培训但是我没有去,布置了练习题,今天周一看的时候,有思路,但是呢没有一个题不花时间去处理的!!!!!唉~~~~

C - 木棒和三角形

Leyni得到了四根木棒,他将使用其中的三根拼成一个三角形。可是他发现有可能构不成具有正面积的三角形,却能构造成一个退化三角形(退化三角形是指面积为零的三角形),有的时候甚至连退化三角形也无法构成。

现在给出四根木棒的长度,请你帮他确定能否使用其中的三根木棒构成具有正面积的三角形或者退化三角形。

Input
本题有多组测试数据,输入的第一行是一个整数T代表着测试数据的数量,接下来是T组测试数据。

对于每组测试数据:

第1行 包含四个以空格分隔的整数代表着四根木棒的长度,木棒长度范围为[1, 100]。

Output
对于每组测试数据:

第1行 如果能构成三角形,则输出T,否则,如果能构成退化三角,则输出S,否则,输出I。

Sample Input
3

4 2 1 3

7 2 2 4

3 5 9 1

Sample Output
T

S

I

暴力程序 一遍AC

**#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std ;
int a[8];
inline bool Judge_1(){
	for(int i=1;i<=2;i++) 
		if(a[i] + a[i+1] > a[i+2]) return true;
	return false;
}

inline bool Judge_2() {
	for(int i=1;i<=2;i++) 
		if(a[i] + a[i+1] == a[i+2]) return true;
	return false;
}

int main() {
	int T;
	scanf("%d",&T);
	while(T--) {
		for(int i=1;i<=4;i++) scanf("%d",&a[i]);
		sort(a+1,a+5);
		if(Judge_1()) printf("T\n");
		else if(Judge_2()) printf("S\n");
		else printf("I\n");
	}
	return 0;
} **

D - 店长推荐Ⅰ

店长和教主是好盆友,他们经常互相交流电脑技术.最近教主推荐了一款叫做Vagaa(哇嘎)的下载工具,店长用了灰常欣慰.于是俩人由此玩了一个游戏,给出一些电动玩具,每个玩具都是v,a,g三个小写字母的期中一个,教主给店长一个难题,用所给的这些字母可以组成多少个”vagaa”?

Input
每行输入一个字符串由小写字母组成,代表现有的玩具,每个字母代表一个玩具,字符串长度0<n<50

处理到文件结束

Output
输出能够组成”vagaa”的数量,按照样例格式输出并换行

Sample Input
vagaaaagav
vvvvvvvvv

Sample Output
THE NUMBER 1S 2.
THE NUMBER 1S 0.

#include<cstdio>
#include<cstring>
#include<iostream>

using namespace std;
#define Maxn 201
char s[Maxn];

int main() {
	while(scanf("%s",s+1) == 1) {
		int len = strlen(s+1);
		int a=0,b=0,c=0;
		for(int i=1;i<=len;i++) {
			if(s[i]=='v') a++;
			if(s[i]=='g') b++;
			if(s[i]=='a') c++;
		}
		printf("THE NUMBER 1S %d.\n",min(min(a,b),c/3));
	}
	
} 

题目没啥好说的,可我还是要发,就像当你来过的纪念

E - 绝对值排序

输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。
Input
输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。
Output
对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。
Sample Input
3 3 -4 2
4 0 1 2 -3
0
Sample Output
-4 3 2
-3 2 1 0

这个题居然会卡行尾空格,良心何在啊aaaa

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<utility> 
#define Maxn 103
using namespace std;
typedef pair<int,int> Pair;
Pair a[Maxn];; 
inline bool cmp(Pair T,Pair Q) {
	return T.second > Q.second;
}
int main() {
	int n;
	while(scanf("%d",&n)==1) {
		if(n==0) break;
		for(int i=1;i<=n;i++) {
			scanf("%d",&a[i].first);
			a[i].second = fabs(a[i].first);
		}
		sort(a+1,a+n+1,cmp);
		for(int i=1;i<n;i++) printf("%d ",a[i].first);
		printf("%d\n",a[n].first);
	} 
	return 0;
} 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七情六欲·

学生党不容易~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值