프로 세 스 전환 에 어떤 문제 가 필요 합 니까?
프로 세 스 가 중 단 된 개인 스 택 에 프로세서 PC 레지스터 의 값 저장 하기; 프로 세 스 가 중 단 된 개인 스 택 에 프로세서 PSW 레지스터 의 값 저장 하기; 프로 세 스 가 중 단 된 프로 세 스 제어 블록 에 프로세서 SP 레지스터 의 값 저장 하기;
프로 세 스 가 중 단 된 개인 스 택 에 프로세서 의 다른 레지스터 값 저장 하기; 실행 중인 프로 세 스 제어 블록 에서 SP 값 을 가 져 와 프로세서 의 레지스터 SP 에 저장 합 니 다. 실행 중인 프로 세 스 의 개인 스 택 복구 프로세서 각 레지스터 의 값;
실행 중인 프로 세 스 의 개인 스 택 에서 PSW 값 을 꺼 내 프로세서 의 PSW 로 보 내기; 실행 중인 프로 세 스 의 개인 스 택 에서 PC 값 을 꺼 내 프로세서 의 PC 로 보 냅 니 다.
2. 오름차 배열 을 입력 한 다음 배열 에서 두 개의 숫자 를 빠르게 찾 습 니 다. 그 와 같은 값 입 니 다.
이 프로 그래 밍 의 아름다움 위 에 이 문제 가 있 습 니 다. 아주 간단 합 니 다. 두 개의 지침 으로 하 나 는 배열 의 앞 을 가리 키 고 하 나 는 배열 의 뒤 를 가리 키 며 한 번 옮 겨 다 니 면 됩 니 다.
3. 한 명의 유명인 과 많은 평민 이 함께 있 습 니 다. 평민 들 은 모두 이 유명인 을 알 고 있 습 니 다. 그러나 이 유명인 은 어떤 평민 도 모 릅 니 다. 임 의 두 평민 간 에 아 는 지 여 부 는 알 수 없 는 것 입 니 다. 알고리즘 을 설계 하여 이 사람 중의 그 유명인 을 빨리 찾 으 세 요. 이미 함수 가 실현 되 었 음 을 알 고 있 습 니 다. bool know (int a, int b) 이 함수 가 true 로 돌아 갈 때 a 가 b 를 알 고 false 로 돌아 갈 때 a 가 b 를 모 르 는 것 을 나타 낸다.
사고방식: 먼저 n 명 을 n / 2 조로 나 누고 각 조 에 2 명 이 있다. 그 다음 에 각 조 의 두 사람 이 이 know 함 수 를 호출 한다. know (a, b) 라 고 가정 하고 true 로 돌아 갈 때 a 가 b 를 알 았 다 는 것 을 설명 하면 a 는 유명인 이 아 닐 것 이다. a 는 배제 할 수 있 고 순서대로 유추 할 수 있다. 각 조 가 이 함 수 를 순서대로 사용 하면 n 명 중 n / 2 명 이 배제 된다.데이터 규 모 는 n / 2 가 될 것 이다.같은 이치 로 남 은 n / 2 명 중에서 이 방법 을 사용 하면 규 모 는 n / 4 가 될 것 이다. 그러면 모든 누적 횟수 는 n / 2 + n / 4 + n / 8 +.........................................................
4. 책 순서 [1, 2, 3, 4, 6, 8, 4, 8, 11, 18, 19, 100] 의 앞부분 은 증가 하 는 배열 이 고 뒤의 하 나 는 증가 하 는 배열 이지 만 전체 배열 은 증가 하 는 배열 이 아니라면 어떻게 그 중의 한 수 를 가장 빨리 찾 을 수 있 습 니까?
[cpp] view plain copy print ?
#include
{
{
if(a[middle] == goal)
//오른쪽
low = middle + 1;
else
}
}
{
for(i = 0; i < len-1; i++)
if(a[i] > a[i+1]) //앞, 뒤 두 배열 의 경계 점 을 찾 습 니 다.
}
{
printf("%d",index);
if(a[i+1] <= goal) //뒤에 있 는 그룹 을 2 분 동안 찾 습 니 다.
index = binary_search(a+i+1, 0, len-i-2, goal);
index += (i+1); //뒤의 그 배열 은 앞의 배열 에 비해 i + 1 입 니 다.
}
{
int len = 13, goal = 4;
return 0;
#include <iostream>
using namespace std;
int binary_search(int* a, int low, int high, int goal) //
{
while(low <= high)
{
int middle = (low+high)>>1; //(low+high)/2
if(a[middle] == goal)
return middle;
//
else if(a[middle] < goal)
low = middle + 1;
//
else
high = middle - 1;
}
return -1;
}
void getNum(int *a, int len, int goal)
{
int i, index;
for(i = 0; i < len-1; i++)
{
if(a[i] > a[i+1]) // 、
break;
}
if(a[i] >= goal) //
{
index = binary_search(a, 0, i, goal);
printf("%d
",index);
}
if(a[i+1] <= goal) //
{
index = binary_search(a+i+1, 0, len-i-2, goal);
if(index != -1)
index += (i+1); // i+1
printf("%d
",index);
}
}
int main(void)
{
int a[]={1,2,3,4,6,8,9,4,8,11,18,19,100};
int len = 13, goal = 4;
getNum(a,len,goal);
return 0;
}
5. 자연수 가 특정한 수의 제곱 인지 판단 합 니 다. 물론 개방 연산 을 사용 할 수 없습니다.
방법 1: 1 부터 N 까지 의 숫자 를 옮 겨 다 니 며 제곱 을 구하 고 N 과 비교 합 니 다. 제곱 이 N 보다 작 으 면 계속 옮 겨 다 니 고 N 과 같 으 면 성공 적 으로 종료 합 니 다. N 보다 크 면 종료 에 실패 합 니 다. 복잡 도 는 O (n ^ 0.5) 입 니 다.
방법 2: 2 분 검색 법 을 사용 하여 1 에서 N 사이 의 숫자 를 판단 합 니 다. 복잡 도 는 O (log n) 입 니 다.
방법 3: (n + 1) ^ 2 = n ^ 2 + 2n + 1, =... = 1 + (2 * 1 + 1) + (2 * 2 + 1) +... + (2 * n + 1) 이 항목 들 이 등차 수열 을 구성 하고 있 음 을 알 수 있 습 니 다 (항목 마다 차이 2)그래서 우 리 는 N - 1, N - 1 - 3, N - 1 - 3 - 5... 과 0 의 관 계 를 비교 할 수 있 습 니 다. 0 보다 크 면 계속 줄 이 고 0 과 같 으 면 성공 적 으로 물 러 납 니 다. 0 보다 작 으 면 실패 합 니 다. 복잡 도 는 O (n ^ 0.5) 입 니 다. 그러나 방법 3 에 서 는 가감 법 으로 방법 1 의 곱셈 을 바 꾸 었 기 때문에 속도 가 더 빨 라 집 니 다.
예 를 들 어: 3 ^ 2 = 9 = 1 + 2 * 1 + 1 + 2 * 2 + 1 = 1 + 3 + 5
4^2 = 16 = 1 + 2*1 + 1 + 2*2+1 + 2*3+1
[cpp] view plain copy print ?
int square(int n)
int i = 1;
while( n > 0 )
i += 2;
}
return 1;
return 0;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Linux Shell 프로 그래 밍 - 텍스트 처리 grep, sed사용자 가 지정 한 '모드' 에 따라 대상 텍스트 를 일치 하 게 검사 하고 일치 하 는 줄 을 인쇄 합 니 다. ##포함 되 지 않 음, 역방향 일치 \ ##키워드 앞 뒤 가 맞지 않 고 키워드 만 일치 합 니 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.