zoukankan      html  css  js  c++  java
  • 循环结构

    循环结构

    数组(应需要产生)

    循环+数组-->数据结构初步

    例. 数4987.输出个位.十位.百位.千位

    数组+循环

    一维 二维 三维

    离散-->线性(一对一){链表 栈 队列}-->树形(一对多)-->图(多对多)

    链表(线性最基础):创建 追加 插入 删除 查找 累加 求和 升序 降序
    New:删除 查找 累加求和 升序 降序

    查找:查找x表示在链表中查找x第一次出现的位置

    线性查找(O(n))最少查找次数为1
    如果N很大 (1+n)/2=N

    二分查找:二分法 树状数组
    链表两个元素 a和len

    数组a[101]
    len变量

    1 #include<iostream>
    2 using namespace std;
    3 int main(){
    4   for(int i=起始值;i<=终了值; i++){
    5     循环内容
    6   }
    7   return 0;
    8 }

    次数=终了值-起始值+1

     找七练习(循环+分支)

    从1到100之间 输出7的倍数或者个位是7 十位是7的数

    1 for(范围内){
    2     if(按条件挑出){
    3     
    4     }
    5 } //过筛子结构  范围内  按条件挑出 发起 

    用for循环结构从1-->100循环,条件为 i/10==7 || i%10==7 || i%7==0

     1 #include<iostream>
     2 using namespace std;
     3 int main(){
     4 
     5   for(int i=0;i<=100;i++){
     6         if( i/10==7 || i%10==7 || i%7==0){
     7           cout<<i<<" ";//空格
     8       }
     9   }
    10   return 0;
    11 }

     

     1 #include<iostream>
     2 using namespace std;
     3 int main(){
     4   int x,f=1;
     5   cin>>x;
     6   if(x==2){cout<<"yes
    ";return 0;}
     7   for(int i=2;i<=x-1;i++){
     8       if(x%i==0){
     9          f=0;
    10          break;//强制退出循环 
    11       }
    12   }
    13   if(f==1){cout<<"yes
    ";}else{cout<<"no
    ";}
    14   return 0;
    15 }

    优化:n-1 sqrt(n) 开平方

     1 #include<iostream>
     2 #include<cmath>
     3 using namespace std;
     4 int main(){
     5   int x,f=1;//入口 
     6   cin>>x;
     7   if(x==2){cout<<"yes
    "; return 0;} //越特殊的越往上写 
     8   if(x%2==0){cout<<"no
    "; return 0;} 
     9   for(int i=2;i<=sqrt(x);i++){
    10       if(x%1==0){
    11          f=0;
    12          break;
    13       }
    14   }
    15   if(f==1){cout<<"yes
    ";}else{cout<<"no
    ";}
    16   return 0;//出口 可以有多个 
    17 } 

    break:强制结束循环

    continue:结束本次 继续下一次循环

    输入100以内既是3的倍数 又是5的倍数

    1 #include<iostream>
    2 using namespace std;
    3 int main(){
    4   for(int i=1;i<=6;i++){
    5     cout<<i*15<<" "; 
    6   }
    7 
    8   return 0;
    9 }

    二重循环

     1 #include<iostream>
     2 using namespace std;
     3 int main(){
     4   for(int i=1;i<=10;i++){
     5     for(int j=1;j<=12;i++){
     6       cout<<"0";
     7     }
     8     cout<<"
    ";
     9   }
    10   return 0;
    11 }
    1 for(){
    2     for(){
    3     
    4     } 
    5 }//多重循环  穷举 

    九九乘法表

     1 #include<iostream>
     2 using namespace std;
     3 int main(){
     4   int n;
     5   cin>>n; 
     6   for(int i=1;i<=n;i++){
     7     for(int j=1;j<=n;j++){
     8     cout<<j<<"X"<<i<<"="<<i*j<<" ";
     9     }
    10     cout<<"
    ";
    11   }
    12   return 0;
    13 }

    输出三角形

     1 #include<iostream>
     2 using namespace std;
     3 int main(){
     4   int n;
     5   cin>>n;
     6   for(int i=1;i<=n;i++){
     7     for(int j=1;j<=n-i;j++){
     8       cout<<" ";
     9     }
    10     for(int j=1;j<=2*i-1;j++){
    11       cout<<"*";
    12     }
    13     cout<<"
    ";
    14   }
    15   return 0;
    16 }

    *
    **
    ***
    ****
    *****
    ******


    i   "  "  "*"
    ————
    1   0   1
    2   1   2
    3   2   3
    i   i-1   i

     1 #include<iostream>
     2 using namespace std;
     3 int main(){
     4   int n;
     5   cin>>n;
     6   for(int i=1;i<=n;i++){
     7     for(int j=1;j<=i-1;j++){cout<<" ";}
     8     for(int j=1;j<=i;j++){cout<<"*";}
     9     cout<<"
    ";
    10   }
    11   return 0;
    12 }

    ***********
    *********
    *******
    *****
    ***
    *

    i       "  "    "*"
    -------------------------------
    1       0     11
    2       1      9
    3       2      7
    4       3      5
    i       i-1   (2*n)-(2*i-1)

     1 #include<iostream>
     2 using namespace std;
     3 int main(){
     4   int n;
     5   cin>>n;
     6   for(int i=1;i<=n;i++){
     7     for(int j=1;j<=i-1;j++){
     8       cout<<" ";
     9     }
    10     for(int j=1;j<=(2*n)-(2*i-1);j++){
    11       cout<<"*";
    12     }
    13     cout<<"
    ";
    14   }
    15   return 0;
    16 }

    输出菱形

     1 #include<iostream>
     2 using namespace std;
     3 int main(){
     4   int n;
     5   cin>>n;
     6   for(int i=1;i<=n;i++){
     7     for(int j=1;j<=n-i;j++){cout<<" ";}
     8     for(int j=1;j<=2*i-1;j++){
     9       if(j==1 || j==2*i-1){
    10         cout<<"*";
    11       }else{
    12         cout<<" ";
    13       }
    14    }   
    15    cout<<"
    ";
    16  }
    17   for(int i=1;i<=n;i++){
    18     for(int j=1;j<=i;j++){cout<<" ";}
    19     for(int j=1;j<=(2*n)-(2*i+1);j++){
    20       if(j==1 || j==(2*n)-(2*i+1)){
    21      cout<<"*";
    22       }else{
    23          cout<<" ";
    24       } 
    25    }    
    26    cout<<"
    ";
    27   } 
    28   return 0;
    29 }

        *
       ***
      *****
     *******
    *********
     *******
      *****
       ***
        *

    i   " "      "*"
    —————
    1  4        1
    2  3        3
    3  2        5
    i  n-i     2*i-1

    1  1        7
    2  2        5
    3  3        3
    i   i    (2*n)-(2*i-1)

     1 #include<iostream>
     2 using namespace std;
     3 int main(){
     4  int n;
     5  cin>>n;
     6  for(int i=1;i<=n;i++){
     7    for(int j=1;j<=n-i;j++){cout<<" ";}
     8    for(int j=1;j<=2*i-1;j++){cout<<"*";}
     9    cout<<"
    ";
    10  }
    11   for(int i=1;i<=n;i++){
    12     for(int j=1;j<=i;j++){cout<<" ";}
    13     for(int j=1;j<=(2*n)-(2*i+1);j++){cout<<"*";}
    14     cout<<"
    ";
    15   }
    16   return 0;
    17 }

    多重循环

    对于多重循环而言,外层循环执行一次,内层循环将执行若干次,知道内层循环的条件不成立,外层循环才去执行下一次操作。

    在多重循环中,内层循环必须在内层结束,不能出现内外循环交叉的情况 (来源:CCF程序设计P146)

     1 #include<iostream>
     2 using namespace std;
     3 int main(){
     4  for(int i=1;i<=7;i++){
     5    for(int j=1;j<=7;j++){
     6      for(int k=1;k<=7;k++){
     7        cout<<i<<j<<k<<"
    ";
     8      }
     9    }
    10  } 
    11   return 0;
    12 } 

    输出所有1~7组合三位数的所有不重复的结果及总个数

     1 #include<iostream>
     2 using namespace std;
     3 int main(){
     4   int s=0;
     5   for(int i=1;i<=7;i++){
     6     for(int j=1;j<=7;j++){
     7          if(j!=1){
     8              for(int k=1;k<=7;k++){
     9                 if(k!=i&&k!=j){
    10                   cout<<i<<j<<k<<"
    ";
    11                   s++;
    12                 }
    13             }
    14         }
    15     }    
    16    }
    17   cout<<s;
    18 } 

    输出100以内的所有质数

     1 #include<iostream>
     2 using namespace std;
     3 int main(){
     4   int f;
     5   for(int i=2;i<=100;i++){
     6       f=1;
     7       if(i==2){cout<<i<<" ";continue;}
     8       for(int j=2;j<=i-1;j++){
     9           if(i%j==0){
    10              f=0;
    11              break;
    12               }
    13       }
    14       if(f==1){cout<<i<<" ";}
    15   }
    16   return 0;
    17 }
     1 #include<iostream>
     2 #include<cmath>
     3 using namespace std;
     4 int main(){
     5   int x,f;
     6   for(int i=2;i<=100;i++){  //冲突 
     7     f=1;
     8     x=i;
     9     if(x==2){cout<<x<<" ";continue;} 
    10     if(x%2==0){continue;} 
    11     for(int j=2;j<=sqrt(x);j++){
    12         if(x%j==0){
    13            f=0;
    14            break;
    15     }
    16     }
    17     if(f==1){cout<<x<<" ";}
    18   }
    19   
    20   return 0; 
    21 } 

    穷举 枚举 列举
    分书方案(现在):五个人选五本书 不是随机 每本书只有一本
    分书方案(复杂):n个人选n本书

    1 1 1 0 1 //范围 选择全部 但 排除三
    1 1 0 1 1
    0 1 1 0 1
    1 1 0 1 0
    0 0 1 1 1
    行表示人
    列表示书
    1 表示喜欢
    0 表示不喜欢
    12345
    21345
    24513
    31245
    35241
    15324
    14325

    维度:描述对象样本特征的个数
    为每一个人描述他能选择的书

    1 1 1 0 1
    1 1 0 1 1
    0 1 1 0 1
    1 1 0 1 0
    0 0 1 1 1

     1 #include<iostream>
     2 using namespace std;
     3 int main(){
     4   int ans=0;
     5   for(int i=1;i<=5;i++){
     6     if(i!=4){
     7       for(int j=1;j<=5;j++){
     8         if(j!=3 && j!=i){
     9           for(int k=1;k<=5;k++){
    10             if(k!=1 && k!=4 && k!=i && k!=j){
    11               for(int m=1;m<=5;m++){
    12                 if(m!=3 && m!=5 && m!=i && m!=j && m!=k){
    13                   for(int w=1;w<=5;w++){
    14                     if(w!=1 && w!=2 && w!=i && w!=j && w!=k && w!=m){
    15                        cout<<i<<j<<k<<m<<w<<"
    "; 
    16                        ans++;
    17                     }
    18                   }
    19                 }
    20               }
    21             }
    22           }
    23         }
    24       }
    25     }
    26   }
    27   cout<<ans<<"
    ";
    28   return 0;
    29 }

     谁是小偷

    有ABCD四个嫌疑人 只有一个小偷
    A:"我不是小偷"      i
    B:"C是小偷            j
    C;"小偷肯定是D"   k
    D;"C在冤枉好人"   w
    有一人在说谎 三人说的是实话 问谁是小偷
    维度还是人

     1 #include<iostream>
     2 using namespace std;
     3 int main(){
     4   for(int i=0;i<=1;i++){
     5     for(int j=0;j<=1;j++){
     6       for(int k=0;k<=1;k++){
     7         for(int w=0;w<=1;w++){
     8           if(i+j+k+w==1 && (i!=1)+(k==1)+(w==1)+(w!=1)==3){
     9             cout<<i<<j<<k<<w<<"
    ";
    10           }
    11         }
    12       }
    13     }
    14   }
    15 
    16   return 0;
    17 }

    在循环结构中的位运算 

    数据在计算机中采用二进制形式存储,一个0或者一个1称为一个二进制位,简称位。

    & 按位与      对应二进制位均为为1时 结果为1 否则为0

    | 按位或        对应的二进制有一个为1则为1

    ^ 按位异或    对应的二进制位数字不同时为1 否则为0

     1 #include<iostream>
     2 using namespace std;
     3 int main(){
     4   int x=3,y=5;
    //给定x y的值 经过下面三步之后可以将x y的值发生交换
    5 x^=y; 6 y^=x; 7 x^=y; 8 cout<<x<<y; 9 return 0; 10 }
    运行结果为 5,3

    ~取反           把运算数的各个二进制位按位求反

    <<左移         m<<n 把m对应的二进制数的各个二进制位向左移n位 高位丢弃 低位0补齐

    >>右移         m>>n 把m对应的二进制数的各个二进制位向右移n位 低位丢弃 高位0补齐

    1 #include<iostream>
    2 using namespace std;
    3 int main(){
    4   int x,y;
    5   cin>>x>>y;
    6   cout<<(x&y)+( (x^y)>>1 );
    7   return 0;
    8 } 

    模拟步骤//以3 5为例

    ①将x y转化成二进制数 即 011 101

    ②x&y=011&101=001

    ③x^y=011^101=110

    ④(x^y)>>1=(110)>>1=11

    ⑤(x&y)+( (x^y)>>1 )=001+11=001+011=100

    ⑥输出二进制数100对应的十进制数4

  • 相关阅读:
    有关怎样入门ACM
    在线安装eclipse中html/jsp/xml editor插件(很可靠)
    如何才干高速成为优秀的程序猿
    JavaScript必知的特性(继承)
    Maven构建真正的J2EE项目
    HLJU 1223: 寻找区间和 (交替推进法)
    重要经验五:block作为属性的注意事项
    Android Studio第一次启动的Fetching android sdk component information的问题
    树莓派学习笔记——apt方式安装opencv
    大型项目开发: 隔离 (《大规模C++程序设计》书摘)
  • 原文地址:https://www.cnblogs.com/Gzznnn/p/13815580.html
Copyright © 2011-2022 走看看