前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ACM札记之一

ACM札记之一

作者头像
慕白
发布2018-08-03 10:40:44
8390
发布2018-08-03 10:40:44
举报

0x1

输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。

输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。

对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。

代码语言:javascript
复制
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int a,i,j,t;
    while (cin>>a&&a)
    {
        int b[a];
        i=0;
        while (i<a)
            cin>>b[i++];
        for(i=0; i<a; i++)
            for (j=0; j<a-i-1; j++)
            {
                if (abs(b[j])<abs(b[j+1]))
                {
                    t=b[j];
                    b[j]=b[j+1];
                    b[j+1]=t;
                }
            }
        for(i=0; i<a-1; i++)
            cout<<b[i]<<" ";
        cout<<b[i]<<'\n';
    }
    return 0;
}

0X2

Problem Description

有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。

Input

输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数据的结束,本行不做处理。

代码语言:javascript
复制
#include <stdio.h>
int main()
{
    int n, x, a[100], i, j;
    while(scanf("%d%d",&n,&x)&&(n||x)) //这个的意思是当输入0 0时结束的
    {
        for(i=0;i<n;i++)
        scanf("%d",&a[i]);
        for(i=0;i<n;i++)
        {
            if(x<a[i])
            break;
        }
        for(j=0;j<i;j++)
        printf("%d ",a[j]);
        printf("%d",x);
        for(j=i;j<n;j++)
        printf(" %d",a[j]);
        printf("\n");
    }
    return 0;
}

0x3

输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。

代码语言:javascript
复制
#include <stdio.h>  
#include <string.h>  
int main()  
{  
    char a[100];  
    int n,i,j,k,d;  
    scanf("%d",&n);  
    while(n--)  
    {  
        scanf("%s",a);  
        d=strlen(a);  
        for(i=0,j=0;i<d;i++)  
        {  
            if(a[i]>='0'&&a[i]<='9')  
             j++;  
        }  
        printf("%d\n",j);  
    }  
    return 0;  
}

0x4

输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。

代码语言:javascript
复制
#include <iostream>
 
using namespace std;
 
int main()
{
    int n,s[100],mix,i,j,k,x,temp;
    while(cin>>n&&n!=0)
    {
        for(i=1; i<=n; i++)
        {
            cin>>s[i];
        }
        mix=s[1];
        for(i=1; i<=n; i++)
        {
            if(s[i]<=mix)
            {
                mix=s[i];
                x=i;
            }
            temp=s[1];
            s[1]=mix;
            s[x]=temp;
            cout<<s[1];
            for(i=2; i<=n; i++)
            {
                cout<<s[i]<<" ";
            }
            cout<<endl;
        }
        return 0;
    }
}

0x5

代码语言:javascript
复制
 有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。
代码语言:javascript
复制
    #include<stdio.h>  
    int main()  
    {  
        int n,m,i,sum,num;  
        while(scanf("%d %d",&n,&m)!=EOF)  
        {  
            num=0;sum=0;  
            for(i=2;i<=n*2;i+=2)  
            {  
               sum+=i;  
               num++;  
               if(num==m&&(i!=n*2))  
               {  
               printf("%d ",sum/num);  
               num-=m;  
               sum=0;  
               }  
            }  
            if(sum==0&&num==0) continue;  
            printf("%d\n",sum/num);  
        }  
    }

0x6

给定三条边,请你判断一下能不能组成一个三角形。

Input

输入数据第一行包含一个数M,接下有M行,每行一个实例,包含三个正数A,B,C。其中A,B,C <1000;

Output

对于每个测试实例,如果三条边长A,B,C能组成三角形的话,输出YES,否则NO。

代码语言:javascript
复制
#include <iostream>
#include <algorithm>
 
 
using namespace std;
 
int main()
{
    double a[4];
    int i,n;
    cin>>n;
    while(n--)
    {
        for(i=1; i<=3; ++i)//这里的++i很关键。数组从第二个元素输入
        {
            cin>>a[i];
        }
        sort(a+1,a+4);
        if(a[1]+a[2]>a[3] && a[3]-a[2]<a[1])
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
    }
    return 0;
}

0x7

古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为:

1+2+4+5+10+11+20+22+44+55+110=284。

而284的所有真约数为1、2、4、71、 142,加起来恰好为220。人们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。

代码语言:javascript
复制
#include <iostream>
 
using namespace std;
 
int sum(int num)
{
    int i;
    int sum=0;
    for(i=1;i<num;i++)
    {
        if(num%i==0)
            sum+=i;
    }
    return sum;
}
 
int main()
{
    int i,a,b,n,k;
    cin>>n;
    for(i=1; i<=n; i++)
    {
        cin>>a>>b;
        k=sum(a);
        if(k==b)
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
    }
    return 0;
}

0x8

输入20个整数,输出其中能被数组中其它元素整除的那些数组元素。

代码语言:javascript
复制
#include <iostream>
using namespace std;
int main() {
    int a[10];
    int i,k,j;
    for(i=0;i<20;i++){
        cin>>a[i];
    }
    for(i=0;i<20;i++){
        k=i;
        a[k]=a[i];
        for(j=0;j<20;j++){
            if(k==j)
                continue;
            else
            {
                if(a[k]%a[j]==0){
                    cout<<a[k]<<endl;
                    break;
                }
            }
        }
    }
    return 0;
}

0x9

若一个数(首位不为0)从左到右读与从右到左读都是一样,这个数就叫做回文数,例如12521就是一个回文数。

给定一个正整数,把它的每一个位上的数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止。给定的数本身不为回文数。

例如:87则有:

STEP1: 87+78=165

STEP2: 165+561=726

STEP3: 726+627=1353

STEP4: 1353+3531=4884

编写一个程序,输入M(12<=M<=100),输出最少经过几步可以得到回文数。如果在8步以内(含8步)不可能得到回文数,则输出0。

代码语言:javascript
复制
#include <iostream>
 
using namespace std;
#交换数字
int reverse(int x)
{
    int num = 0;
    while(x != 0)
    {
        num = x%10 +num*10;
        x = x/10;
    }
    return num;
}
#判断回文数
int judge(int x)
{
    if(x==reverse(x))
        return 1;
    else
        return 0;
}
 
int main()
{
    int L, M;
    cin >> L;
    while(L--)
    {
        cin >> M;
        int cnt = 0;
        while(cnt <= 8)
        {
            if(!judge(M))
            {
                M = M +reverse(M);
                cnt++;
            }
            else
            {
                cout << cnt << endl;
                break;
            }
        }
        if(cnt > 8)
        {
            cout << 0 << endl;
        }
    }
    return 0;
}

除特别注明外,本站所有文章均为慕白博客原创,转载请注明出处来自https://cloud.tencent.com/developer/article/1176112

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档