Ctrip Online

No.1

以前写过
Leetcode 原题 Best time to sell stock

但是输入输出要自己写,然后很蠢的是数字用逗号隔开的,要处理


代码(逗号分割数字)——1

string读入,然后逗号变成空格, 变成stringstream 流,转成字符串,太复杂了

int main()
{
    string strTemp;  
    //int array[4];  
    //int i = 0;  
      vector<int> array;
    stringstream sStream;  

    cin >> strTemp;  
    int pos = strTemp.find(',');  
    while (pos != string::npos)  
    {  
        strTemp = strTemp.replace(pos, 1, 1, ' ');  //将字符串中的','用空格代替  
        pos = strTemp.find(',');  
    }  

    sStream << strTemp;  //将字符串导入的流中  
    while (sStream)  
    {  
        int i_tmp ;
        sStream >> i_tmp;
        array.push_back(i_tmp);  
    }
    cout<< maxProfit(array)<<endl; 

}

代码(逗号分割数字)——2

输入n,n*n的数据,然后逗号分隔的,用getchar,获得无关字符

void display(int **a,int n)
{
    for(int i = 0;i<n;i++)
    {

        for(int j = 0;j<n;j++)
            cout<< a[i][j] << " ";
        cout<<endl;
    }
}


int main()
{
    int n;
    cin>>n;
    int **a = new int*[n];
    for(int i = 0;i<n;i++)
    {
        int j = 0;
        a[i] = new int[n];
            for(int j = 0;j<n;j++)
            {
                  scanf("%d",&a[i][j]);
                  getchar();
            }
    }
    display(a,n);
}

c++动态二维数组

java是可以直接new int [size][Column]
但是c++不行
因为

int size=50,Column=50;
int (*p)[Column]=new int [size][Column]

这样的语句,编译器通不过,为什么呢?
首先 new int[size][Column] 就是动态生成时确定的,所以它没有错
那么就是 int(*p)[Column],这句有问题了,这句为什么不对呢, 那是因为,这是一个定义语句,而定义语句先经过编译器进行编译,当编译器运行到此处时,发现Column 不是常数,因此不能通过编译。 而之所以编译器认为Column 不是常数,是因为编译阶段,编译器起的作用是查语法错误,和预分配空间,它并不执行程序,因此,没有执行那个赋值语句(只是对这个语句检查错误,和分配空间),因此编译阶段,它将认为column 是个变量。所以上面的二维数组定义是错误的, 它不能通过编译。
c++二维


 int **p= new int*[size];//定义指针数组 
 for(int i=0;i<size;i++)
 {
   p[i]=new int[Column];
 }
//释放空间哇
for(int i = 0; i<size; i++)
{
    delete[] p[i];
}
 delete[] p;

No.2

二分查找,返回第一次出现位置或者(-1-应该存在的位置)
额,要注意边界条件吧
比如while(low<=high)小于等于
最后的应该位置是high+1或者low

#include<iostream>
using namespace std;

int binary(int p[],int n,int x)
{
    int low = 0,high = n-1;
    while(low<=high)
    {
        int mid = (low+high)/2;
        if(x<p[mid])
            high = mid-1;
        else
            low = mid+1;
    }
    if(low>high)
        return (-1-low);
}

int main()
{
    int x,n;
    cin>>x>>n;
    if(n==0)
    {
       cout<<-1<<endl;
       return 0;
    }
    int * a = new int [n];
    for(int i = 0;i<n;i++)
    {
        cin>>a[i];
        if(a[i]==x)
        {
            cout<<i<<endl;
            return 0;   
        }   
    }

    cout<<binary(a,n,x)<<endl;
    delete a;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值