十進->2375=2*10³+3*10²+7*10¹+5*10⁰

二進->1011=1*2³+0*2²+1*2¹+1*2⁰

*想法:11 (十進制) -> ? (二進制) :

  • 11/2=5…1
  • 5/2=2…1
  • 2/2=1…0
  • 2/1=0…1
  • 11(十進制)->1011(二進制)

*使用陣列存數字(餘數)

/* 程式功能: [C語言] 十進位轉換成二進位數 */
//十進->2375=2*10^3+3*10^2+7*10^1+5*10^0
//二進->1011=1*2^3+0*2^2+1*2^1+1*2^0
#include <stdio.h>int main()
{
int num=0;
int i=0;
int a[12];

printf("輸入欲轉換十進位數字:\n");
scanf("%d",&num);

//求每回商數及餘數
//把餘數存進陣列
while(num>0){
a[i]=num%2;
num=num/2;
i++;
}
//迴圈最後一次i++會多加一次故減一
i--;

printf("十進轉二進位為:\n");

//printf[i],i=3,2,1,0
for(;i>=0;i--){
printf("%d",a[i]);
}
return 0;
}

--

--

建立一個結構 : node,其中包含data(int)、next(pointer)。

*指標用來指向下一個node的位址。

struct node{
int data;
struct node * next;
};

create 一個指標(head),指向node資料型態,初始值為NULL

node *head=NULL;

C語言是用malloc()函數來動態配置記憶體

回傳記憶體位址=(指標變數所指向的型態 *) malloc(所需的記憶空間)

其中(指標變數所指向的型態 *)是將malloc()所傳回的位址強制轉換指標變數所指向的型態(node)。

此時head指標存下所配置空間的記憶體位址

head=(node *)malloc(sizeof(node));

--

--

Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.

Example:

Input: [0,1,0,3,12]
Output: [1,3,12,0,0]

Note:

  1. You must do this in-place without making a copy of the array.
  2. Minimize the total number of operations.

Code:

void moveZeroes(int* nums, int numsSize){
int j = 0;
for(int i=0;i<numsSize;i++){

if(nums[i]!=0){
nums[j]=nums[i];
j++;
}
}
printf(“%d”,j);
for(int k=j;k<numsSize;k++){
nums[k]=0;
}


return 0;
}

Output:

--

--

struct是一種 "複合型資料 ":為了將一連串 "變數 " 綁在一起。

此處利用結構、宣告了一個新的資料類型叫「student」。然而「student」並不是一個變數,而是一種資料型態,是一種「用來宣告變數」的資料型態。

範例如下:

--

--

Given a binary array, find the maximum number of consecutive 1s in this array.

Example 1:

Input: [1,1,0,1,1,1]
Output: 3
Explanation: The first two digits or the last three digits are consecutive 1s.
The maximum number of consecutive 1s is 3.

Note:

  • The input array will only contain 0 and 1.
  • The length of input array is a positive integer and will not exceed 10,000

Input:

[1,0,1,1,0,1]

My Code:

int findMaxConsecutiveOnes(int* nums, int numsSize){
int count=0,max=0;
for(int i=0;i<numsSize;i++){
if(nums[i]==1){
count=count+1;
if(count>max){
max=count;
}
}
else{
count=0;
}
printf("count:%d\n",count);
printf("max:%d\n\n",max);
}
return max;
}

Output:

count:1
max:1

count:0
max:1

count:1
max:1

count:2
max:2

count:0
max:2

count:1
max:2

Your answer(return value):

2

--

--

題目:

計算出最後可以喝多少瓶汽水。輸入e=目前手上的空瓶,f=撿到的空瓶,c=需要幾瓶空瓶換一罐汽水。r=幾筆資料。

EX:

Sample Input :

2

9 0 3

5 5 2

Sample Output:

4

9

Code:

#include<stdio.h>
int main(){
int e,f,c,s,l,sum,r;
printf("input 次數:");
scanf("%d ", &r);
for(int i=r;i>0;i--){
scanf("%d%d%d", &e, &f, &c );
e=e+f;
while((e/c)!=0){
l+=e/c;
e=e/c+e%c;
}
printf("%d\n",l);
l=0;
}
return 0;
}

Output:

input 次數:2
9
0
3
4#answer
5
5
2
9#answer

--

--

Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.

Follow up: If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.

Example 1:

Input…

--

--