东北林业大学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;
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值