算法小组第三次交流会代码

算法小组第三次交流会代码(算法入门第二章 刘汝佳版)

包含第三章全部例题及部分习题代码,并用c++改写

今天看到一句感觉很有道理的话:“C++语言名字里的‘++’就是常用的‘++’运算符。”,本人也确切能体会到,C++源于C,而后又高于C。

程序 3-1 逆序输出(有输入问题)

比较大的数组应该尽量声明在main函数外,否则程序可能无法运行。

#include<stdio.h>
//#include<cstdio>
using namespace std;
const int maxn=105;
int a[maxn];

int main()
{
    int x,n=0;
    while(scanf("%d",&x)==1)
    {
        a[n++]=x;
    }
    for(int i=n-1;i>=1;i--)
    {
        printf("%d",a[i]);
    }
    printf("%d",a[0]);
    return 0;
}


程序 3-2 开灯问题

说来惭愧,调试了好一会儿发现是a[j]=!a[j]处出了问题,写成了a[j]=!a[i],浪费时间了。

#include<iostream>

using namespace std;

const int maxn=1050;
int a[maxn]={0}; //定义灯0为关,1为开

int main()
{
    int n,k;
    cin>>n>>k; //有几盏灯和几个人
    for(int i=1;i<=k;i++) //遍历每个人
    {
        for(int j=1;j<=n;j++) //遍历每盏灯,并巧妙利用人数和灯数的关系
        {
            if(j%i==0) //若满足条件,进行操作
            {
                a[j]=!a[j]; //开关灯操作
            }
        }
    }
    for(int i=1;i<=n;i++) //遍历每盏灯输出亮着的灯
    {
        if(a[i])
        cout<<i<<" ";
    }
    return 0;
}

程序 3-3 蛇形填数

C/C++支持连续赋值,例如a=b=1; 但是其中变量b应该提前声明,若为:int a=b=1;(b未声明,未分配地址)则为错误。

#include<string>
#include<iostream>
const int maxn=20;
int a[maxn][maxn]={0};
using namespace std;

int main()
{
    int n,x,y,tot=0;
    cin>>n;
    tot=a[x=0][y=n-1]=1; //初始化第一个
    while(tot<n*n)
    {
        while(x+1<n && !a[x+1][y]) a[++x][y]=++tot; //下
        while(y-1>=0 && !a[x][y-1]) a[x][--y]=++tot; //左
        while(x-1>=0 && !a[x-1][y]) a[--x][y]=++tot; //上
        while(y+1<n && !a[x][y+1]) a[x][++y]=++tot; //右
    }
    for(x=0;x<n;x++) //循环遍历输出
    {
        for(y=0;y<n;y++)
        {
            printf("%4d",a[x][y]); //保持字长,printf更为方便
        }
        cout<<endl;
    }
    return 0;
}

程序3-4 竖式问题

方法论:两种方法让scanf遇到空格继续输入字符串

1、gets()函数 ,用gets()替代scanf();
gets可以无限读取字符串,不会判断上限,以回车结束读取。其用法为gets(s),其中s为字符串变量(字符串数组名或字符串指针)。简单的理解就是读入一串字符(遇到回车结束),存到s中。

#include<stdio.h>
int main()
{
   char str[50];
   gets(str);
   printf("%s\n",str);
   return 0;
}

2、scanf("%[^\n]",str) ,遇到"\n"结束
'^'含有非的意思
“%[^\n]“即遇到\n结束。
如果使用”%[^v]”,那我们输入 “I love you!” ,输出的就是 “I lo”

#include<stdio.h>
int main()
{
	char str[50];
	scanf("%[^\n]",str);//"%[^v]"
	printf("%s\n",str);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值