zoukankan      html  css  js  c++  java
  • 机试学习笔记1

    一.统计叶子节点个数

     1 #include<iostream>
     2 using namespce std;
     3 #define MAX_TREE_SIZE 100
     4 typedef struct{
     5     char daata;
     6     int paarent;
     7 }PTNode;
     8 typedef struct{
     9     PTNode nodes[MAX+TREE_SIZE];
    10     int  n;
    11 }PTree;
    12 
    13 int GetLeavesCount(PTree T){
    14     int count=0;
    15     for(int i=0;i<T.n,i++)
    16         if(int j=0;j<T.n;j++){
    17             if(i==j)
    18                 continue;
    19             else if(T.nodes[j].parent==i){
    20                 count++;
    21                 break;
    22             }
    23         }
    24         return T.n-count;
    25 }
    26 int main(){
    27     cout<<"请输入树的结点的个数:"28     int n=0; 
    29     cin>>n;
    30     PTree pt;
    31     pt.n=n;
    32     cout<<"请输入每个节点的信息:"<<endl;
    33     for(int i=0;i<n;i++){
    34         cin>>pt.nodes[i].data;
    35         cin>>pt.nodes[i].parent;
    36     }
    37     int leaves=GetLeavesCount(pt);
    38     cout<<leaves<<endl;
    39     system("pause");
    40     return 0;
    41 }

    二.vector建树

     1 #incluce<iostream>
     2 #include<vector>
     3 #include<algorithm>
     4 using namespace std;
     5 int main(){
     6     int n;
     7     while(cin>>n){
     8         vetor<int >tree[10000];
     9         int num1,num3;
    10         int maxnum;
    11         maxnum=-1;
    12         while(n--){
    13             cin>>num1>>num2;
    14             tree[num1].push_back(num2);
    15             maxnum=max(max(num1,num2),maxnum);
    16         } 
    17         int tot;
    18         tot=0;
    19         for(int i=1;i<=maxnum;i++){
    20             if((int )tree[i].size()==0){
    21                 tot++;
    22             }    
    23         }
    24         cout<<tot<<endl;
    25     }
    26     return 0;
    27 }

    三.输入一个数组求任意给定区间内数值的和

     1 #include<iostream>
     2 using namespace std;
     3 int main(){
     4     int n;
     5     while(cin>>n){
     6         int a[200];
     7         for(int i=1;i<=n;i++){
     8             cin>>a[i];
     9         }
    10         int t;
    11         cin>>t;
    12         while(t--){
    13             int l,r;
    14             cin>>l>>r;
    15             int tot;
    16             tot=0;
    17             for(int i=1;i<=r;i++){
    18                 tot+=a[i];
    19             }
    20             cout<<tot<<endl;
    21         }
    22     }
    23     return 0;
    24 } 

    //拓展

    修改指定区间数字

    计算指定区间数字和

    线段树/树状数组

    四.螺旋矩阵

    打印出螺旋矩阵,求i j列的数字

    偶数

    不是偶数

     1 #include<iostream>
     2 using namespace std;
     3 void printSpiralMatrix(int **matrix,int x,int y,int start,int n){
     4     if(n<=0)
     5         return;
     6     if(n==1){
     7         maxtrix[x][y]=start;
     8         return;
     9     }
    10     for(int i=x;i<x+n-1;i++)//
    11         matrix[y][i]=sart++;
    12     for(int j=y;j<y+n-1;j++)//
    13         matrix[j][x+n-1]=start++;
    14     for(int i=x+n-1;i>x;i--)//
    15         matrix[y+n-1][i]=start++;
    16     for(int j=y+n-1;j>y;j--)//
    17         matrix[j][x]=start++;
    18     printSpiralMatrix(matrix,x+1,y+1,start,n-2); 
    19 }
    20 int searchNum(int **matrix,int i,int j){
    21     return matrix[i-1][j-1];
    22 } 
    23 int main(){
    24     cout<<"输入螺旋矩阵的行数:"<<endl;
    25     int n=0;
    26     cin>>n;
    27     int **matrix=(int **)malloc(n*sizeof(int *));
    28     for(int i=0;i<n;i++)
    29         matrix[i]=(int *)malloc(n*sizeof(int));
    30         
    31     printSpiralMatrix(matrix,0,0,1,n);
    32     
    33     for(int i=0,i<n;i++){
    34         for(int j-0;j<n;j++)
    35             printf("%5d",matrix[i][j]);
    36         cout<<endl;
    37     }
    38     int num=searchNum(matrix,3,4);
    39     cout<<num<<endl;
    40     system("pause");
    41     return 0;
    42 }

    五.并查集(集合的表示)

     1 //查找某个元素所在的集合 
     2 int find(int x){
     3     if(tree[x]==x)
     4         return x;
     5     return tree[x]=find(tree[x]);
     6 } 
     7 //并运算 
     8 void merge(int x,int y){
     9     int fx=find(x);
    10     int fy=fnd(y);
    11     if(fx!=fy)
    12         tree[fx]=fy;
    13 }
     1 //城市联通
     2 #include<iostream>
     3 using namespace std;
     4 int find(int s[],int x){
     5     while(s[x]!=x)
     6         x=s[x];
     7     return x;
     8 } 
     9 void initial(int *a,int n){
    10     for(int i=1;i<=n;i++)
    11         a[i]=i;
    12 }
    13 void union1(int s[],int x,int y){
    14     int fx=find(s,x);
    15     int fy=find(s,y);
    16     if(fx!=fy)
    17         s[fx]=fy;
    18 }
    19 //确定联通分量的个数
    20 int find_ans(int s[],int n){
    21     int sum=0;
    22     for(int i=1;i<=n;i++)
    23         if(s[i]==i)
    24             ++sum;
    25         return sum;
    26 } 
    27 int main(){
    28     cout<<"输入城镇的数目和道路数目:";
    29     int m=0,n=0;
    30     cin>>n>>m;
    31     //创建一个双亲表示法的数组 
    32     int *arr=new int[n+1];
    33     initial(arr,n);
    34     int a=0,b=0;
    35     while(n!=EOF){
    36         if(!n)
    37             break;
    38         initial(arr,n);
    39         for(int i=0;i<m;i++){
    40             cin>>a>>b;
    41             union1(arr,a,b);
    42         }
    43         printf("%d
    ",find_ans(arr,n)-1);
    44     }
    45     system("pause");
    46     return 0;
    47 }
    48 
    49 //DFS 
    50 
    51 //rank启发式合并 

    六.最大公约数

     1 欧几里得算法(辗转相除法)
     2 #include<algorithm>  __gcd函数(两个下划线) 
     3 
     4 gcd(a,b)={gcd(b,a%b) b!=0 
     5            {  a        b=0
     6 
     7 int gcd(int a,int b){
     8     if(b==0)
     9         return a;
    10     return gcd(b,a%b); 
    11 }
    12 
    13 long long gcd(long long a,long long b){
    14     if(b==0)
    15         return a;
    16     return gcd(b,a%b);
    17 }
    18 
    19 int multi_gcd(int a[],int n){
    20     int res=gcd(a[o],a[1]);
    21     for(int i=2;i<n;i++){
    22         res=gcd(res,a[i]);
    23     }
    24     return res;
    25 }

    最小公倍数

    1 int lcm(int a,int b){
    2     return a/gcd(a,b)*b;
    3     //防止a*b溢出 
    4 } 
     1 #inlcude<iostream>
     2 #include<math.h>
     3 using namespace std;
     4 int findMax(int *arr,int n){
     5     int max=arr[0];
     6     for(int i=1;i<n;i++){
     7         if(arr[i]>max)
     8             max=arr[i];
     9     }
    10     cout<<max<<" ";
    11     return max;
    12 } 
    13 int findMin(int *arr,int n){
    14     int min=arr[0];
    15     for(int i=1;i<n;i++)
    16         if(arr[i]<min)
    17             min=arr[i];
    18         cout<<min<<" ";
    19         return min;
    20 }
    21 //采用辗转相除法求解最大公约数
    22 int division(int a,int b){
    23     if(b>a){
    24         int temp=a;
    25         a=b;
    26         b=temp;
    27     }
    28     while(true){
    29         int p=a&b;
    30         if(p==0)
    31             return b;
    32         else{
    33             a=b;
    34             b=p;
    35         }
    36     }
    37 } 
    38 //最小公倍数 
    39 int multiNum(int a,int b){
    40     int sp=division(a,b);
    41     return a*b/ap;
    42 }
    43 int main(){
    44     cout<<"输入数据的个数:";
    45     int n=0;
    46     cin>>n;
    47     int *arr=new int[n];
    48     for(int i=0;i<n;i++)
    49         cin>>arr[i];
    50     int a=findMin(arr,n);
    51     int b=findMax(arr,n);
    52     int split=division(a,b);
    53     cout<<split<<endl;
    54     int sp=multiNum(a,b);
    55     cout<<sp<<endl;
    56     system("pause");
    57     return 0;
    58 }

    七.统计英文字母个数,单词个数,出现次数最多的字母和次数

     1 #include<iostream>
     2 #included<string>
     3 #include<set>
     4 #include<algorithm>
     5 #include<math>
     6 using namespace std;
     7 int main(){
     8     string s;
     9     while(getline(cin,s)){
    10         int len;
    11         len=(int )s.size()
    12         set<char >charnum;
    13         /*
    14         set vector map
    15         */
    16         for(int i=0;i<len;i++){
    17             if(s[i]>='A'&&s[i]<='Z'){
    18                 s[i]+=32;
    19             }
    20         }
    21         int allnum,maxnum,num[1000];
    22         memset(num,0,sizeof(num));
    23         allnum=0;
    24         maxnum=-1;
    25         for(int i=0;i<len;i++){
    26             if(s[i]!=' '){
    27                 charnum.insert(s[i]);
    28                 num[s[i]]++;
    29             }
    30             if(s[i]==' '){
    31                 allnum++;
    32             }
    33         }
    34         cout<<"字母个数:"<<endl;
    35         cout<<(int )charnum.size()<<endl;
    36         cout<<"单词个数:"<<endl;
    37         cout<<allnum+1<<endl;
    38         for(int i=0;i<1000;i++){
    39             if(num[i]!=0)
    40             maxnum=max(num[i],maxnum);
    41         }
    42         cout<<"出现最多的字母:"<<endl;
    43         for(int i=0;i<1000;i++){
    44             if(num[i]==maxnum){
    45                 char ch;
    46                 ch=i;
    47                 cout<<ch<<" ";
    48             }
    49         }
    50     }
    51     cout<<endl;
    52     cout<<"出现次数:"<<endl;
    53     cout<<maxnum<<endl;
    54 } 
    55 return 0;

    八.进制转换

     1 //12->10
     2 #include<iostream>
     3 #include<cmath>
     4 using namespace std;
     5 
     6 int dozenCharToDecem(char c);
     7 void printDozenToDecem(char* num);
     8 int dozenToDecem(char* num);
     9 void printNumofBin(int num);
    10 
    11 int main(){
    12     char num[100];
    13     cout<<"请输入二进制数:"<<endl;
    14     cin>>num;
    15     printDozenToDecem(num);
    16     cout<<dozenToDecem(num)<<endl;
    17     printNumofBin(dozenToDecem(num));
    18     return 0;
    19 }
    20 
    21 int dozenChaarToDecem(char c){
    22     int result=-1;
    23     if(c>='0'&&c<='9'){
    24         result
    25     }
    26 }
     1 #include<iostream>
     2 using namespace std;
     3 
     4 void function(int a,int b);
     5 
     6 int main(void){
     7     int a,b;
     8     cout<<"请输入a和b:";
     9     cin>>a;
    10     cin>>b;
    11     function(a,b);
    12     return 0; 
    13 }
    14 
    15 void function(int a,int b){
    16     int count[10]={0,0,0,0,0,0,0,0,0,0};
    17     int i;
    18     for(i=0;i<=b;i++){
    19         int temp=i;
    20         while(temp/10!=0){
    21             count[temp%10]++;
    22             temp/=10;
    23         }
    24         count[temp]++;
    25     }
    26     for(i=0;i<10;i++){
    27         cout<<count[i]<<"	";
    28     }
    29 }
     1 #include<iostream>
     2 using namespace std;
     3 
     4 void function(int n);
     5 
     6 int main(void){
     7     int n;
     8     cout,<"please input n:";
     9     cin>>n;
    10     function(n);
    11     return 0;
    12 }
    13 
    14 void function(int n){
    15     int i,j,k;
    16     int temp=1;
    17     for(i=0;i<n;i++){
    18         for(j=0;j<n-1-i;j++){
    19             cout<<' '<<'	'; 
    20         }
    21         for(j=0;j<i+1;j++){
    22             cout<<temp<<'	';
    23             temp++;
    24         }
    25         cout<<endl;
    26     }
    27 }

    //STL

    最大值最小值

    min(,)

    max(,)

    快速排序sort(a,a+10);

    数据交换swap(a,b);

    求下一个排next_permutation  

    容器类

    不限制长度的数组:vector

    队列queue,堆栈stack

    双向队列deque

    有限队列priority_queue

  • 相关阅读:
    OpenGL中glVertex、显示列表(glCallList)、顶点数组(Vertex array)、VBO及VAO区别
    OpenGL FrameBufferCopy相关Api比较(glCopyPixels,glReadPixels,glCopyTexImage2D,glFramebufferTexture2D)
    OpenGL渲染流程
    GPU大百科全书索引(有助于理解openGL工作流程)
    二进制配置文件为什么比json等配置文件效率高
    游戏开发中的矩阵初探
    Objective-C 30分钟入门教程
    cocos2dx骨骼动画Armature源码分析(三)
    cocos2dx骨骼动画Armature源码分析(二)
    linux中df和du查看磁盘大小不一致解决方法(转载)
  • 原文地址:https://www.cnblogs.com/shendongnian/p/12427162.html
Copyright © 2011-2022 走看看