C言語の日々の練習 (13)

はじめに:
毎日の練習シリーズ、各号には多肢選択問題 5 問とプログラミング問題2 問が含まれています。初心者でもはっきりと聞くことができるように、ブロガーができるだけ詳しく説明します。日々の練習シリーズは今後も更新され、授業期間中の学業状況も更新されます。

 5 つの多肢選択式の質問:

1. プログラムの実行結果は () です。

#include<stdio.h>
int main()
{
int x=1.9;
x++;
printf("%d",x);
}

A、1 B、2 C、2.9 D、3

分析: 整数変数の理解を調べる簡単な質問です。整数変数の初期値に小数が割り当てられている場合、小数部分は vs コンパイラで直接破棄されます (つまり、Code 1 Assign 1.9 の x)。 、実際には x に 1 を代入し、x++ に移動して x=2 にし、最終的な出力結果は 2 になります。B を選択します。 

2. 初期値が 1 である整変数 a、b、c があります。式 ++a| |++b&&++c を実行すると、a、b、c の値はそれぞれ ()

A、2、1、1 B、2、2、2 C、2、2、1 D、2、1、2

分析: 間違いが起こりやすい質問、 || (or) 演算と && (and) 演算の使用法を調べます。 || 演算の片側が true である限り、それは true であるため、片側が true であると判断すると、相手側を再度判断する必要はなく、コンピュータはそれをスキップするだけです。&& 演算では、両側が true であることは true であり、一方が false である限り、それは false であるため、一方が false であることが判明すると、もう一方は判定されません。

ルールによれば、最初に遭遇するのは ++a、最初に ++ を使用、a=2, 2 は true、|| 演算であるため、後半は実行されず、&& も実行されません。最後の a =2、b=1、c=1、A を選択

3. 次のプログラムの結果は () です。

#include<stdio.h>
int main()
{
	int x = 5;
	int i = 0, j = 0, k = 0;
	x = (i = 4, j = 16, k = 32);
	printf("%d %d %d %d", x,i,j,k);
}

A、5、4、16、32 B、5、0、0、0 C、32、4、16、32 D、32、0、0、0

分析: カンマ式の理解を確認します。カンマ式は左から右に実行され、式全体の結果が最後の式になります。

左から右に向かって、最初に i に 4 の値を割り当て、次に j に 16 の値を割り当て、最後に最後の式 k=32 に到達します。カンマ式の演算に従って、式全体の結果も次のようになります。 k=32, つまり、最終的に x=k=32 となり、x と k に同時に値を代入するので、最終的に x と k は両方とも 32 になります。 =16、x=k=32、つまり最終的な印刷結果は、32、4、16、32 には C を選択します。

4. 次のプログラムがあり、プログラム実行後の出力は () です。

#include <stdio.h>
int main()
{
int x = 072;
printf("%d\n", x+1);
}

A、72 B、73 C、115 D、59

 分析: 基本的な質問、詳細を制御できるかどうかを調べます。8 進数には 0 という接頭辞が付き、16 進数には 0x という接頭辞が付き、10 進数には接頭辞がありません。したがって、プログラムによって x に割り当てられた値は 8 進数の 72 で、10 進数に変換すると 2*1+7*8=58 となり、最終的に x+1 として 59 が出力されるため、D を選択します。

5. int 変数 a、b、c、d を定義し、すべて 1 を代入したい場合、次の記述で間違っているのは、A, int a=b=c=d=1; B, int a=
です。 1, b=1 , c=1, d=1; C, int a,b,c,d; a=b=c=d=1; D, int a,b,c,d=1; a= b=c=d ;



分析: 1 つずつ進み、最初にオプション A を見てください。オプション A の演算は 3 つの整数変数 b、c、d を定義していないため、A は間違っています。オプション B は 1 つずつ定義されています。問題ありません。B は問題ありません。正しい。C のオプションは代入前にすべて定義されています。C は正しいです。D オプションは、最初に 4 つの変数 a、b、c、d を定義し、d に 1 を代入し、最後に a=b=c=d を設定し、a、b、c を設定します。これは d に等しいので、最終的に a、b、c、d はすべて 1 となり、D が正しいことになります。まとめると、A を選択します。

プログラミングの質問 1: 

ソード ポインター オファー 10 - I. フィボナッチ数列 - LeetCode

ヒント: モデルを取得することを忘れないでください。ブロガーは最初からモデルを取得しませんでした。私はそれについて長い間考えました (笑) 

int fib(int n) {
    if (n == 0)
    {
        return 0;
    }
    if (n <= 2)
    {
        return 1;
    }
    //以上特殊情况单独处理下
    int f1 = 1; int f2 = 1; int f3 = 0; int i = 0;
    for (i = 3; i <= n; i++)
        //我们一开始计算的就是第三个斐波那契数,所以令i=3
    {
        f3 = (f1 + f2) % 1000000007;
        //先储存下一个斐波那契数
        f1 = f2;
        f2 = f3;
        //进行数据更新
    }
    return f3;
    //返回目标
}

プログラミングの質問 2: 

134. ガソリンスタンド - LeetCode

ヒント: この質問は難しいです。貪欲アルゴリズムを学習してからここに来ることをお勧めします。ここのブロガーは貪欲アルゴリズムを使用しませんでしたが、最も気取らない方法を使用してそれに合格しました。目的は、誰もが貪欲アルゴリズムの厳しさを感じてもらうことです。コード。ブロガーのコードのコピーは、ブロガーが質問に答えるためのスキルを使用していないために失敗することがあります。ネットワークが良好でない場合は、制限時間を超えて失敗する可能性があります。あと数回試してください。 

 

int canCompleteCircuit(int* gas, int gasSize, int* cost, int costSize) {
    int oil = 0;
    int i = 0;
    if(gasSize==1)
    //只有一个单独处理
    {
      if(gas[0]>=cost[0])
      return 0;
    }
    for (i = 0; i < gasSize; i++)
    {
        int tmp = i;
        //不要在函数内对循环变量操作,因此使用tmp来间接操作
        int flag = 1;
        //判定是否可以行进的变量
        oil = gas[tmp];
        if (oil > cost[tmp])
        {
            oil -= cost[tmp];
            for (++tmp; tmp < gasSize; tmp++)
            {
                oil += gas[tmp];
                oil -= cost[tmp];
                if (oil < 0)
                {
                    flag = 0;
                    break;
                }
            }
            if (flag == 0)
            {
                continue;
            }
            for (tmp = 0; tmp < gasSize; tmp++)
            {
                oil += gas[tmp];
                oil -= cost[tmp];
                if (tmp == i)
                {
                    break;
                }
                if (oil < 0)
                {
                    flag = 0;
                    break;
                }
            }
            if (flag == 1)
            {
                return tmp;
            }
            else
            {
                continue;
            }
        }
        else
        {
            continue;
        }
    }
    return -1;
}

さて、今日の練習はこれで終わりです、来てくれた友達に感謝します、皆さんの明るい未来を祈っていますO(∩_∩)O

 

 

おすすめ

転載: blog.csdn.net/fq157856469/article/details/132645813
おすすめ