东北林业大学Acm培训大一(三)(暴力枚举)
Description
给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍。比如给定1 4 3 2 9 7 18 22,得到的答案是3,因为2是1的两倍,4是2个两倍,18是9的两倍。
Input
输入包括n组测试数据。每组数据包括一行,给出2到15个两两不同且小于100的正整数。每一行最后一个数是0,表示这一行的结束后,这个数不属于那2到15个给定的正整数。
Output
对每组输入数据,输出一行,给出有多少个数对满足其中一个数是另一个数的两倍。
Sample Input
3
1 4 3 2 9 7 18 22 0
2 4 8 10 0
7 5 11 13 1 3 0
Sample Output
3
2
0
思路:找出所有结合,写出所有情况,判断两个数是否一个为另一个的倍数。
for(int i=1;i<=n-1;i++) {
for(int j=i+1;j<=n;j++) {
if(a[i]==2a[j]||a[j]==2a[i])//ai为aj 两倍或aj为ai两倍
ans++;//如果满足两个数一个为另一个的两倍,结果+1 } }
完整代码
#include <stdio.h>
using namespace std;
int main()
{ int t,cnt,ans,a[20];
scanf("%d",&t);
for(int ca=1;ca<=t;ca++)//while(t--)
{ cnt=0;ans=0;
int x;
while(~scanf("%d",&x))
{ if(x==0) break;
cnt++;
a[cnt]=x;
}
for(int i=1;i<=cnt-1;i++)
{ for(int j=i+1;j<=cnt;j++)
{ if(a[i]==2*a[j]||a[j]==2*a[i])
ans++;
}
}
printf("%d\n",ans);
}
return 0;
}
//注:cnt为输入数据个数,每输入一个数+1,相当于上页的n
在小明曾经玩过的一种对号码的纸牌游戏(乐透)里,玩家必须从{1,2,……,49}中选择6个数。玩Lotto的一个流行策略是(虽然它并不增加你赢的机会):就是从这49个数中,选出k(k>6)个数组成一个子集S,然后只从S里拿出牌来玩几局游戏。例如,k=8,s={1,2,3,5,8,13,21,34},那么有28场可能的游戏:[1,2,3,5,8,13],[1,2,3,5,8,21],[1,2,3,5,8,34],[1,2,3,5,13,21],……,[3,5,8,13,21,24]。
读取数字k和一组数S,输出由S中的数组成的所有可能的游戏。
Input
输入数据有多组,每组一行,每行有多个整数,其中第一个整数为数字k,接下来有k个整数,即子集S。当k为0,输入结束。
Output
输出由S中的数组成的所有可能的游戏。每种游戏一行。
Sample Input
7 1 2 3 4 5 6 7
0
Sample Output
1 2 3 4 5 6
1 2 3 4 5 7
1 2 3 4 6 7
1 2 3 5 6 7
1 2 4 5 6 7
1 3 4 5 6 7
2 3 4 5 6 7
for(i=1;i<=k;i++)
{ for(j=i+1;j<=k;j++)
{ for(x=j+1;x<=k;x++)
{ for(r=x+1;r<=k;r++)
{ for(t=r+1;t<=k;t++)
{ for(l=t+1;l<=k;l++)
{ printf("%d %d %d %d %d %d\n",m[i],m[j],m[x],m[r],m[t],m[l]);
}
}
}
}
}
}
【改进后】
for(int i1=1;i1<=k-5;i1++)
{ for(int i2=i1+1;i2<=k-4;i2++)
{ for(int i3=i2+1;i3<=k-3;i3++)
{ for(int i4=i3+1;i4<=k-2;i4++)
{ for(int i5=i4+1;i5<=k-1;i5++)
{ for(int i6=i5+1;i6<=k;i6++)
{ printf("%d %d %d %d %d %d\n",a[i1],a[i2],a[i3],a[i4],a[i5],a[i6]);
}
}
}
}
}
}
}
return 0;
}
给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍。比如给定1 4 3 2 9 7 18 22,得到的答案是3,因为2是1的两倍,4是2个两倍,18是9的两倍。
Input
输入包括n组测试数据。每组数据包括一行,给出2到15个两两不同且小于100的正整数。每一行最后一个数是0,表示这一行的结束后,这个数不属于那2到15个给定的正整数。
Output
对每组输入数据,输出一行,给出有多少个数对满足其中一个数是另一个数的两倍。
Sample Input
3
1 4 3 2 9 7 18 22 0
2 4 8 10 0
7 5 11 13 1 3 0
Sample Output
3
2
0
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{ int x,n,ans,i,j,q;
int a[100]={0};
scanf("%d\n",&n);
while(n)
{ ans=0;q=0;
memset(a,0,sizeof(a));
while(scanf("%d",&x)!=-1)
{ if(x==0) break;
else {ans++;a[ans]=x;}
}
for(i=1;i<=ans-1;i++)
{for(j=i+1;j<=ans;j++)
{ if(a[i]*2==a[j]||a[j]*2==a[i])
q++;
}
} printf("%d\n",q);
n--;
}return 0;
}
在小明曾经玩过的一种对号码的纸牌游戏(乐透)里,玩家必须从{1,2,……,49}中选择6个数。玩Lotto的一个流行策略是(虽然它并不增加你赢的机会):就是从这49个数中,选出k(k>6)个数组成一个子集S,然后只从S里拿出牌来玩几局游戏。例如,k=8,s={1,2,3,5,8,13,21,34},那么有28场可能的游戏:[1,2,3,5,8,13],[1,2,3,5,8,21],[1,2,3,5,8,34],[1,2,3,5,13,21],……,[3,5,8,13,21,24]。
读取数字k和一组数S,输出由S中的数组成的所有可能的游戏。
Input
输入数据有多组,每组一行,每行有多个整数,其中第一个整数为数字k,接下来有k个整数,即子集S。当k为0,输入结束。
Output
输出由S中的数组成的所有可能的游戏。每种游戏一行。
Sample Input
7 1 2 3 4 5 6 7
0
Sample Output
1 2 3 4 5 6
1 2 3 4 5 7
1 2 3 4 6 7
1 2 3 5 6 7
1 2 4 5 6 7
1 3 4 5 6 7
2 3 4 5 6 7
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{int n,i,i1,i2,i3,i4,i5,i6,k;
int a[100]={0};
while(~scanf("%d",&n))
{ if(n==0) break;
for(i=1;i<=n;i++)
{ scanf("%d",&a[i]); }
for(i1=1;i1<=n-5;i1++)
{ for(i2=i1+1;i2<=n-4;i2++)
{ for(i3=i2+1;i3<=n-3;i3++)
{ for(i4=i3+1;i4<=n-2;i4++)
{ for(i5=i4+1;i5<=n-1;i5++)
{ for(i6=i5+1;i6<=n;i6++)
{printf("%d %d %d %d %d %d\n",a[i1],a[i2],a[i3],a[i4],a[i5],a[i6]);
}}}}}}
对于给定的一个字符串,统计其中数字字符出现的次数。
Input
输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串,字符串的长度小于等于100。
Output
对于每个测试实例,输出该串中数值的个数,每个输出占一行。
Sample Input
2
asdfasdf123123asdfasdf
asdf111111111asdfasdfasdf
Sample Output
6
9
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{ int n,m,i;
char a[100];
scanf("%d\n",&n);
while(n)
{ m=0;memset(a,0,sizeof(a));
scanf("%s",a);
for(i=0;i<strlen(a);i++)
{ if(a[i]<='9'&&a[i]>='0')
m++;
}
printf("%d\n",m);
n--; }
return 0;}
在测试超大规模集成电路时,对给定的一个设计,专家要检测元件是否相互遮盖。一个元件可视为一个矩形,假设每个矩形都是水平排列的(边与x轴或y轴平行),所以长方形由最小的和最大的x,y坐标表示。
编程计算完全被覆盖的矩形个数。
Input
输入有多组长方形实例。对每组长方形,第一个数字是长方形的数量,然后是长方形的最小和最大x,y坐标(最小x,最大x,最小y,最大y)。
Output
对每组输入数据,输出一行,是被完全覆盖的长方形数量。
Sample Input
3
100 101 100 101
0 3 0 101
20 40 10 400
4
10 20 10 20
10 20 10 20
10 20 10 20
10 20 10 20
Sample Output
0
4
#include <iostream>
#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
struct stu {int x1;int x2;int y1;int y2;}a[100];
bool cmp(stu a,stu b)
{return a.x1<b.x1;
}
int main()
{int j,i,n;while( scanf("%d",&n)!=-1){j=0;for(i=1;i<=n;i++){scanf("%d %d %d %d",&a[i].x1,&a[i].x2,&a[i].y1,&a[i].y2);}sort(a+1,a+n+1,cmp);for(i=1;i<n;i++){ if(a[i].x1!=a[i+1].x1){if((a[i+1].x1<a[i].x2)&&(a[i+1].y1<a[i].y2))j++;}else{if(a[i+1].y1<a[i].y2)j++;}}if(j>0) j=j+1;printf("%d\n",j);}return 0;
}
公司举办年会,为了活跃气氛,设置了摇奖环节。参加聚会的每位员工都有一张带有号码的抽奖券。现在,主持人依次公布 n 个不同的获奖号码,小谢看着自己抽奖券上的号码 num,无比紧张。请编写一个程序,如果小谢获奖了,请输出他中的是第几个号码;如果没有中奖,请输出 0。
Input
第一行一个正整数 n,表示有 n 个获奖号码,2<n≤100。
第二行包含 n 个正整数,之间用一个空格隔开,表示依次公布的 n 个获奖号码。
第三行一个正整数 num,表示小谢抽奖券上的号码。
1≤获奖号码,num<10000。
Output
一行一个整数,如果小谢中奖了,表示中奖的是第几个号码;如果没有中奖,则为 0。
Sample Input
7
17 2 3 4 9555 6 1
3
Sample Output
3
Hint
暴力
单组输入
#include <iostream>
#include <bits/stdc++.h>
#include <algorithm>
using namespace std
int main()
{ int n,i,sum,num=0;
int a[100];scanf("%d\n",&n);for(i=1;i<=n;i++){scanf("%d",&a[i]);}getchar();scanf("%d",&sum);for(i=1;i<=n;i++){if(a[i]==sum){printf("%d",i);num=i;break;}if(num==0) printf("0");return 0;
}
小林在 NOIP 比赛期间住在“新世界”酒店。和其他酒店不一样的是,这个酒店每天都有一个高能的数字 t,这个数字在楼层中是不会出现的,以 t=3 为例,则 3、13、31、33 等楼层是不存在的,楼层编号为 1,2,4,5,…所以实际上的 4 楼才是 3 楼。
已知小林预订了编号为 m 层的房间,并且当天高能数字是 t,现在他想知道房间所在的真实楼层是多少。
Input
一行两个整数 m 和 t,1≤m≤100000,0≤t≤9,保证 m 对 t 合法。
Output
一行一个整数,表示真实楼层。
Sample Input
14 3
Sample Output
12
#include <iostream>
#include <bits/stdc++.h>
#include <algorithm>
using namespace std;int n,j,i,t,m,b;int a[100001];int main()
{scanf("%d %d",&m,&t);for(i=1;i<=m;i++){ b=i; j=0;while(i){n=i;i=i%10;if(i==t)j++;i=n/10;}i=b;if(j==0)a[i]=i;else a[i]=0;}j=0;for(i=1;i<=m;i++){if(a[i]==0)j++;}printf("%d\n",m-j);return 0;
}
C、O、W的顺序形式构成了一句他最喜欢的奶牛单词
“COW”。现在,他想知道有多少次 COW 出现在文本中。
如果 COW 内穿插了其他字符,只要 COW 字符出现在正确的顺序,小伟也不介意。甚至,他也不介意出现不同的 COW 共享一些字母。例如,CWOW 出现了 1 次 COW,CCOW 算出现了2 次 COW,CCOOWW 算出现了 8 次 COW。
Input
第 1 行为 1 个整数 N。
第 2 行为 N 个字符的字符串,每个字符是一个 C、O 或 W。
Output
输出 COW 作为输入字符串的字串出现的次数(不一定是连续的)。
提示:答案会很大,建议用 64 位整数(long long)。
Sample Input
6
COOWWW
Sample Output
6
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
long long k1,k2,i,j,n,str1[100010],str2[100010],sum;
char a[100010];
int main()
{scanf("%lld%s",&n,a);k1=0;k2=0;sum=0;for(i=0;i<n;i++){if(a[i]=='C') k1++;str1[i]=k1;}for(i=n-1;i>=0;i--){if(a[i]=='W') k2++;str2[i]=k2;}for(i=0;i<n;i++){if(a[i]=='O')sum=sum+str1[i]*str2[i];}printf("%lld\n",sum);return 0;
}
东北林业大学Acm培训大一(三)(暴力枚举)相关推荐
- 大一寒假培训(三)——暴力枚举及妙用
大一寒假培训(三) 经过两天的培训之后,第三天也到来了.今天讲的是暴力枚举.好像没什么可讲的(悄咪咪地说) 接下来还是今天的练习 nefu 8 二倍的问题 Description 给定2到15个不同的 ...
- acm大一寒假集训--暴力枚举类
题目来源于东北林业大学OJ 东北林业大学OJ,点击进入
- 大一寒假训练:暴力枚举
一.暴力枚举思想: 其实就是直接循环遍历,利用计算机强大的计算性能,也就是俗称的"一个个试". 二.部分练习&题解: *2/5/6题较难: 1.NEFU OJ:大乐透 这题 ...
- acm新手小白必看系列之(3)——暴力枚举精讲及例题
acm新手小白必看系列之(3)--暴力枚举精讲及例题 暴力枚举说白了就是列举所有情况,然后一个一个排查. 这节多说无益直接上题(这节假的精讲) 1·大乐透 在小明曾经玩过的一种对号码的纸牌游戏(乐透) ...
- 新手入门刷题(专题三)暴力枚举
新手入门刷题(专题三)暴力枚举--->持续更新 4.14 统计方形(数据加强版) 题目描述 有一个 n×m 方格的棋盘,求其方格包含多少正方形.长方形(不包含正方形). 输入格式 一行,两个正整 ...
- 寒假集训三(暴力枚举)2020.01.02(11题)
寒假集训三(暴力枚举)id :521 Problem:A 二倍的问题 Description 给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍.比如给 ...
- 啊哈算法——第三章:暴力枚举
第三章:暴力枚举 枚举的思想不必多说,此处仅引数中两例. 火柴棍等式 #include <iostream> using namespace std; const int maxn = 1 ...
- 搜索初步-暴力枚举总结与举例
暴力枚举 一.过程: 暴力枚举是将所有情况都进行枚举出,并找到自己的目标的值的过程. 二.方法: 1.用多重循环嵌套,用来寻找在一个数组中的一个值是否与其他的一个或多个值相关. (这里的相关表示为加减 ...
- 林大ACM培训心得day4
林大ACM培训心得day4 学会用笔计算解题 一.最大公约数(gcd) 求最大公约数有三种办法 1.暴力枚举法,代码如下: int a,b;int gcd=0; cin>>a>> ...
最新文章
- linux svn 启动两个库,linux – 在一个存储库上运行两个svnserve实例是安全的,还是只有一个?...
- EXT.NET高效开发(一)——概述
- Linux命令(11)—— 给文件增加和减少权限chomod命令
- Shell——常用工具(cut、sed、awk、sort)
- java基础—自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序(java集合六)
- 安卓10可用的性能监视器_iPad 秒变监视器,无线图传设备真的有用吗?
- php中创建函数的正确方法,如何在PHP中创建一个函数
- POJ-2480 Longge's problem 欧拉函数
- 用汇编语言与C语言实验其他排序,微机原理实验报告冒泡排序
- 部署到gcp_Linux基础架构学习 - 使用GCP托管云解决方案 - Day09
- 数据结构(王道计算机考研笔记)
- JavaScript到底应该怎么用?
- ATM+bzoj+Trajan算法+spfa求最短路
- MogaFX-M1日
- 进化树构建的方法原理及检验
- English trip V1 - 23. Big and Bigger Teacher:Corrine Key: adjective comparisons 形容词 比较级
- jMetal学习笔记(二)-NSGAii源码解读
- input限制只能输入数字,限制输入数字长度或者大小
- 【抓包工具】配置:Fiddler 配置手机/平板抓包 https
- [Error Code: 904, SQL State: 42000] ORA-00904 : 标识符无效