-2
#define MAX 20    //defines max as 20  
#include< stdio.h>  

main()    //main function starts  
{  
    int a[MAX],i,n;  //defines a array along with some variables  `

    printf("Enter the value of n\n");    //take the size of the array from user  
    scanf("%d",&n);    //reads the value
    printf("Enter the numbers\n");    //asks to enter the values of array  
    for(i=0;i< n;i++)    //for loop is used to read the elements of the array     
    scanf("%d",&a[i]);    //reads the element    

    i=0;    //initialises i to zero to point it to the first element of array  
    do    //starts the do while loop      
    {  
        a[i]=a[i]+1;    //increases the stored value of the array by 1  
        i++;  
    } while(i< n);    //checks the while condition whether i is less than n  

    printf("The final array is \n");  
    for(i=0;i< n;i++)    //for loop is used to print the array  
        printf("%d\t",a[i]);    //prints the final array  
}  

また、 do while ループ内で i の値が変化すると効率が変化し、変化した場合はどのように変化しますか。

while ループが以下のように変更された場合、効率はどうなるでしょうか

int j=0;
do{
  if(j==n-2 || j==n-3)
    i--;
  else 
  {
    a[i]=a[i]++;
    i++;
    j++;
  }
} while(i< n);
4

3 に答える 3

1

ループが 0 から (n-1) に 3 回インクリメントされるため、答えは O(3n) = O(n) です。

于 2012-11-08T17:04:26.913 に答える
0

の上)

これは、整理された「スマートな」方法で書き込もうとしているものだと思います。

#include< stdio.h>  
main()
{  
    int *a;
    int i;
    int n;

    printf("Enter the value of n\n");
    scanf("%d",&n);
    a = (int*)malloc(n * sizeof(*a));//dynamically allocate the array in the needed size.
    printf("Enter the numbers\n");
    for(i=0; i<n; ++i)
    {
        scanf("%d",&a[i]);
    }

    for(i=0; i<n; ++i)
    {
        a[i]++;
    }

    for(i=0; i<n; ++i)
    {
        printf("%d\t",a[i]);
    }
} 
于 2012-11-08T17:22:16.720 に答える
0

iは中間ループでインクリメントされないため、アルゴリズムは O(∞)です。

于 2012-11-08T16:59:30.450 に答える