算法竞赛入门基础1

1  如何输出025  %02d 如果要防止一个数的值前面带有0,可以将他赋给一个变量,输出该变量。
2  用c++控制输入的格式,即占几个空,对齐的要求。用setw(),包含头文件#include<iomanip> setprecision()来控制小数后面的位数
 #include<iostream>
#include<iomanip>
usinig namespace std;
int main()
{
  cout<<setw(4)<<left<<a<<endl;  左对齐,4个位
cout<<setprecision(4)<<a<<endl;
}
3 3个整数排序的最简方法  if(a>b)  调整  if(a>c)  互换  if(b>c)  互换
 还可以用sort函数来写 #include<algorithm> int a[5]; sort(a,a+5) 可以对其进行排序
4  程序运行时间 #include<ctime> (double)clock()/CLOCKS_PER_SEC;
5  清0数组  memset(a,0,sizeof(a));
6  如何在c++中用文件读写文件
7  算法竞赛入门2-6 用1,2...9组成3个3位数,每个数恰好只能使用1次,要求abc,,def,ghi=1:2:3,求出所有解
#include<iostream>
using namespace std;
int main()
{
    int a,b,c,i;
    int q[10];


    for(a=123;a<=987/3;a++)
    {
        for(i=0;i<10;i++)  q[i]=1;
        b=a*2;
        c=3*a;
        if(q[(a/100)])  q[(a/100)]=0;
        else continue;
        if(q[(a/10%10)])  q[(a/10%10)]=0;
        else continue;
        if(q[(a%10)])    q[(a%10)]=0;
        else continue;
        if(q[(b/100)])  q[(b/100)]=0;
        else continue;
        if(q[(b/10%10)])  q[(b/10%10)]=0;
        else continue;
        if(q[(b%10)])    q[(b%10)]=0;
        else continue;
        if(q[(c/100)])  q[(c/100)]=0;
        else continue;
        if(q[(c/10%10)])  q[(c/10%10)]=0;
        else continue;
        if(q[(c%10)])    q[(c%10)]=0;
        else continue;
        cout<<a<<" "<<b<<" "<<c<<endl;
    }


}
更优的算法
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    int a,b,c,s[10],sum,i;
    for(a=123;a<=987/3;a++)
    {
        b=2*a;
        c=3*a;
        memset(s,0,sizeof(s));
        s[a/100]=s[(a/10)%10]=s[a%10]=1;
        s[b/100]=s[(b/10)%10]=s[b%10]=1;
        s[c/100]=s[(c/10)%10]=s[c%10]=1;
        sum=0;
        for(i=1;i<10;i++)
        {
            sum+=s[i];
        }
        if(sum==9)
            cout<<a<<" "<<b<<" "<<c<<endl;


    }
}
8 memcpy(b,a,sizeof(int)*k)  将数组a的元素全部转移到数组中
9 介绍2个函数
 sprintf(buf,"%d%d%d%d",a,b,c,d);a,b,c,d全部存到buf中,且每个字母占据一个地址

strchr(s,buf[i]) 查找某字符在字符串首次出现的位置,不出现,即为NULL

10 3个数a,b,c,输出a/b,保留c位小数

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int a,b,c;
    while(scanf("%d%d%d",&a,&b,&c)==3)
    {
        printf("%.*lf\n",c,(double)a/b);
    }
}

 提示  /*printf的特殊用法:对于m.n的格式可以用如下方法表示char ch[20];
printf("%*.*s\n",m,n,ch);前边的*定义的是总的宽度,
后边的定义的是输出的个数。分别对应外面的参数m和n 。 
这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。  
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值