2019 年四月第一周总结

e#include <iostream>

using namespace std;

int main()
{
    int a[10]={0,3,4,6,8};  //a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4
    int *p=a,*p1=&a[9];
//    cout<<&a[9]-&a[0]<<" "<<a[9]-a[0]<<endl;   //输出9个元素,a[9]-a[0]的值
    *(p+5)=15;
  //  cout<<&*(p+5)<<endl;    输出的是地址
 //   cout<<*(p+5)<<endl; 输出的是内容
 //   cout<<p<<endl;    输出的是a[0]的地址
 //   cout<<*p<<endl;    输出的是a[0]的内容
    *(p1-3)=*(p+5)+1;     //*(p1-3)等价于a[6],*(p+5)+1等价于a[5]的内容+1;
//    cout<<*(p1-3)<<" "<<*(p+5)+1<<endl;
 //   cout<<a[6]<<" "<<a[5]<<endl;   //a[6]=16,a[5]=15;
 //   cout<<a[5]+1<<endl;    等价于a[6]
    for(int i=7;i<10;i++)
        p[i]=10+i;         //p[7]=17,p[8]=18,p[9]=19
    cout<<"p1-a="<<p1-a<<endl;   //输出有几个元素差
    cout<<p1<<" "<<a<<endl;
//    cout<<&a[9]-&a[0]<<endl;
//    cout<<"a="<<a<<endl;
    cout<<"a[p1-a]="<<a[p1-a]<<endl;
    cout<<"*p1="<<*p1<<endl;
    cout<<"*(&a[3])="<<*(&a[3])<<endl;  //输出a[3]的内容
    cout<<"*&a[3]="<<*&a[3]<<endl;       ////输出a[3]的内容
//    cout<<"&(*(a[3])="<<&(*(a[3]))<<endl;  //错误定义
//    cout<<"&*a[3]="<<&*a[3]<<endl;  //错误定义
//    cout<<"&(*p+1)="<<&(*p+1)<<endl;  //错误定义
//    cout<<"&(*p)="<<&(*p)<<endl;   //输出第一个指针的地址
//    cout<<"&(*p)+1="<<&(*p)+1<<endl;  //第二个指针的地址
    cout<<"(++*p)="<<(++*p)<<endl;
    cout<<"(*p++)+1="<<(*p++)+1<<endl;
    cout<<"(*p)++="<<(*p)++<<endl;
//    for(int i=0;i<10;i++)  输出a[0]~a[9]
//        cout<<a[i]<<" ";
    cout<<endl;
/***    while(p1>&a[4])    //输出比a[4]大的
    {
        cout<<*p1<<" ";
        p1--;
    }
    cout<<endl;
***/
    return 0;
}

char s[21],*p=s;
for(int i=0;i<20;i++)
s[ i ]=‘A’+i; //s[0]=A;
s[20]=’\0’;
p++; //s[1]=B
cout<<“p=”<<p<<endl; //输出p指向的字符串
cout<<"*p="<<*p<<endl; //输出p指向的字符

字符数组 or 整型数组 or float型数组 or double型数组要比使用的数组范围大,否则内存出错,具体原因看了编译原理后再详解

定义的时候不可以对数组 or 指针的内容取地址,但是可以对数组 or 指针 的内容取地址。

/***
    杨辉三角
***/

#include <iostream>
#include <cstdio>
using namespace std;
int a[100][100];
int main()
{
    int i,j;
    **a=1;       //a[0][0]=1
    int n;
    while(~scanf("%d",&n))
    {
        for(i=1;i<=n;i++)
        {
            **(a+i)=1;   //a[i][0]=1
            *(*(a+i)+i)=1; //a[i][i]=1
            for(j=1;j<i;j++)
                *(*(a+i)+j)=*(*(a+i-1)+j-1)+*(*(a+i-1)+j);  //a[i][j]=a[i-1][j-1]+a[i-1][j];
        }
        for(i=0;i<n;i++)
        {
            for(j=0;j<=i;j++)
            {
                if(j>0)
                    cout<<" "<<*(*(a+i)+j);
                else
                    cout<<*(*(a+i)+j);
            }
            cout<<endl;
        }
    }
    return 0;
}

[上海程序设计B题] (https://ac.nowcoder.com/acm/contest/551/B)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

AC代码:
#include<bits/stdc++.h>
using namespace std;
char a[1010],b[1010];
int m[27];
char c;
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=1;i<=26;i++)  //构造一个新的字典序
	{
		cin>>c;
		m[c-'a'+1]=i;         
	}
	for(int i=0;i<n;i++)
	{
		cin>>a>>b;
		int len1=strlen(a);
		int len2=strlen(b);
		int len=max(len1,len2);
		int j=0;
		for( j=0;j<len;j++)
		{
			if(j==len1&&j<len2)
			{
				printf("<\n");
				break;
			}
			if(j==len2&&j<len1)
			{
				printf(">\n");
				break;
			}
			if(m[a[j]-'a'+1]>m[b[j]-'a'+1])
			{
				printf(">\n");
				break;
			}
			if(m[a[j]-'a'+1]<m[b[j]-'a'+1])
			{
				printf("<\n");
				break;
			}
		}
		if(j==len) printf("=\n");
	}
	return 0;
}

重点就是构造一个新的字典序;然后进行比较,第一次没注意读题WA了,233333

猜你喜欢

转载自blog.csdn.net/weixin_43517282/article/details/89056299