http://zh.wikipedia.org/wiki/%E5%96%AE%E7%B2%BE%E5%BA%A6%E6%B5%AE%E9%BB%9E%E6%95%B8
#include<iostream>
#include<math.h>
#include<string>
using namespace std;
int main()
{
//01000000011000000000000000000000
//10111111100000000000000000000000
//01000001010010000000000000000000
string input;
string a="",b="",c="",b_invert="";
double d_b=0.0,d_c=0.0,ans=0;
cout<<"please input number";
cin>>input;
cout<<"szie="<<input.length()<<endl;
a=input[0];
for(int i=1;i<=8;i++)
b=b+input[i];
for(int j=7;j>=0;j--)
b_invert=b_invert+b[j];
for(int i=0;i<=7;i++)
d_b=d_b+(b_invert[i]-48)*pow(2.0,i);
d_b=d_b-127;
cout<<"exp = "<<d_b<<endl;
for(int k=9;k<=31;k++)
c=c+input[k];
for(int l=0;l<=22;l++)
d_c=d_c+(c[l]-48)*pow(2.0,-1*(l+1));
cout<<"dc = "<<d_c<<endl;
d_c=1+d_c;
cout<<"fraction = "<<d_c<<endl;
ans=d_c*pow(2.0,d_b);
if(a=="0")
cout<<"ans = +" ;
else
cout<<"ans = -" ;
cout<<ans<<endl;
return 0;
}
2014年9月28日 星期日
2014年8月25日 星期一
複習stack
#include <iostream>
using namespace std;
class my_stack
{
private:
int *number;
int pos;
int size;
public:
my_stack() //default
{
number=new int[100];
pos=-1;
size=100;
}
my_stack(int len) //assign size
{
number=new int[len];
pos=-1;
size=len;
}
void pop() //pop
{
cout<<"pop "<<number[pos]<<endl;
pos--;
if(pos==-2)
{
cout<<"====================="<<endl;
cout<<"index can't be slower than 0,try again"<<endl;
cout<<"====================="<<endl;
pos++;
}
}
void push(int num) //push
{
pos++;
if(pos+1>size)
{
cout<<"====================="<<endl;
cout<<"error buffer is filled,try again"<<endl;
cout<<"====================="<<endl;
pos--;
}
else
number[pos]=num;
}
void show() //show
{
if(pos==-1)
{
cout<<"====================="<<endl;
cout<<"there is no content"<<endl;
cout<<"====================="<<endl;
}
else
{
cout<<"====================="<<endl;
cout<<"index low to high"<<endl;
cout<<"stack contents"<<endl;
cout<<"====================="<<endl;
for(int i=pos;i>=0;i--)
cout<<"|"<<"__"<<number[i]<<"__"<<"|"<<endl;
}
}
~my_stack(){} //delete
};
int main()
{
int number;
int opt;
int size;
cout<<"input stack size : ";
cin>>size;
my_stack source(size);
cout<<"1 --- push "<<endl
<<"2 --- pop "<<endl
<<"3 --- show "<<endl;
while(true)
{
cout<<"command number : " ;
cin>>opt;
switch(opt)
{
cin>>opt;
case 1:
cout<<"enter a number : ";
cin>>number;
source.push(number);
break;
case 2:
source.pop();
break;
case 3:
source.show();
break;
default:
cout<<"input error , try again"<<endl;
break;
}
}
return 0;
}
using namespace std;
class my_stack
{
private:
int *number;
int pos;
int size;
public:
my_stack() //default
{
number=new int[100];
pos=-1;
size=100;
}
my_stack(int len) //assign size
{
number=new int[len];
pos=-1;
size=len;
}
void pop() //pop
{
cout<<"pop "<<number[pos]<<endl;
pos--;
if(pos==-2)
{
cout<<"====================="<<endl;
cout<<"index can't be slower than 0,try again"<<endl;
cout<<"====================="<<endl;
pos++;
}
}
void push(int num) //push
{
pos++;
if(pos+1>size)
{
cout<<"====================="<<endl;
cout<<"error buffer is filled,try again"<<endl;
cout<<"====================="<<endl;
pos--;
}
else
number[pos]=num;
}
void show() //show
{
if(pos==-1)
{
cout<<"====================="<<endl;
cout<<"there is no content"<<endl;
cout<<"====================="<<endl;
}
else
{
cout<<"====================="<<endl;
cout<<"index low to high"<<endl;
cout<<"stack contents"<<endl;
cout<<"====================="<<endl;
for(int i=pos;i>=0;i--)
cout<<"|"<<"__"<<number[i]<<"__"<<"|"<<endl;
}
}
~my_stack(){} //delete
};
int main()
{
int number;
int opt;
int size;
cout<<"input stack size : ";
cin>>size;
my_stack source(size);
cout<<"1 --- push "<<endl
<<"2 --- pop "<<endl
<<"3 --- show "<<endl;
while(true)
{
cout<<"command number : " ;
cin>>opt;
switch(opt)
{
cin>>opt;
case 1:
cout<<"enter a number : ";
cin>>number;
source.push(number);
break;
case 2:
source.pop();
break;
case 3:
source.show();
break;
default:
cout<<"input error , try again"<<endl;
break;
}
}
return 0;
}
2014年4月6日 星期日
MIPS 輸入10組密碼 如果是這十組密碼內 則成功
.data
value: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
msg1: .asciiz "correct\n“
msg2: .asciiz "incorrect please try again\n“
msg3: .asciiz "===========================\n“
.text
main:
la $t0, value # array
li $s1, 0 # i
li $t1, 0 # index
li $t2, 0 # arr[index]
read:
li $v0, 5
syscall
add $t2,$t1,$t0 #t2=arr[t1]
sw $v0, 0($t2) #store to array
add $t1,$t1,4
add $s1, $s1, 1 # i++
beq $s1, 10 , line # i<10?
j read
line:
li $v0, 4 # draw a line
la $a0, msg3
syscall
guess:
li $s3, 0 # k
li $t3, 0 # index2
li $t4, 0 # arr[index2]
li $v0, 5
syscall
inner_for:
add $t4,$t3,$t0
lw $t5,0($t4) #arr[index2] load to $t5
bne $v0,$t5,ER
li $v0, 4
la $a0, msg1 #print correct
syscall
j guess #restart guess
ER:
add $s3, $s3, 1 # k++
add $t3,$t3,4
beq $s3, 10 , while # k<10?
j inner_for
while:
li $v0, 4
la $a0, msg2 #print incorrect
syscall
j guess
value: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
msg1: .asciiz "correct\n“
msg2: .asciiz "incorrect please try again\n“
msg3: .asciiz "===========================\n“
.text
main:
la $t0, value # array
li $s1, 0 # i
li $t1, 0 # index
li $t2, 0 # arr[index]
read:
li $v0, 5
syscall
add $t2,$t1,$t0 #t2=arr[t1]
sw $v0, 0($t2) #store to array
add $t1,$t1,4
add $s1, $s1, 1 # i++
beq $s1, 10 , line # i<10?
j read
line:
li $v0, 4 # draw a line
la $a0, msg3
syscall
guess:
li $s3, 0 # k
li $t3, 0 # index2
li $t4, 0 # arr[index2]
li $v0, 5
syscall
inner_for:
add $t4,$t3,$t0
lw $t5,0($t4) #arr[index2] load to $t5
bne $v0,$t5,ER
li $v0, 4
la $a0, msg1 #print correct
syscall
j guess #restart guess
ER:
add $s3, $s3, 1 # k++
add $t3,$t3,4
beq $s3, 10 , while # k<10?
j inner_for
while:
li $v0, 4
la $a0, msg2 #print incorrect
syscall
j guess
2014年4月2日 星期三
LISP
(fast 2 * n 1) ==> 2^n
(fast 2 + n 0) ==> 2*n
(define (fast a op n unit)
(define (square x) (op x x))
(define (iter a n result)
(cond ((= n 0) result)
((even? n) (iter (square a) (/ n 2) result))
(else (iter a (- n 1) (op a result)))))
(iter a n unit))
(fast 2 + n 0) ==> 2*n
(define (fast a op n unit)
(define (square x) (op x x))
(define (iter a n result)
(cond ((= n 0) result)
((even? n) (iter (square a) (/ n 2) result))
(else (iter a (- n 1) (op a result)))))
(iter a n unit))
2014年3月30日 星期日
spanning tree prim C++
#include <iostream>
#include<string>
#include<vector>
using namespace std;
struct link{
string node1;
string node2;
int weighted;
};
void split(string, vector<link>*);
int count_node(vector<link>*, vector<string>*);
int main()
{
vector<link>input; //原始input
vector<string>n_list; //node的list
vector<string>new_n_list; //node的list
vector<link>Candidate;
vector<link>answer; //最後要輸出的結果
string command; //每一行輸入
int size, edge_count = 0, node_count;
while (true)
{
getline(cin, command);
if (command == "exit")
break;
split(command, &input);
}
node_count = count_node(&input, &n_list); //算有幾個點 & 做出點的list
/////prim//////
int total_weighted = 0;
link tmp;
new_n_list.push_back(n_list[0]); //以第一個當作起點
n_list.erase(n_list.begin());
for (int i = 0; edge_count != (node_count - 1); i++)
{
string n1, n2;
for (int j = 0; j < new_n_list.size(); j++) //需要想法QAQ
{
n1 = new_n_list[j];
for (int k = 0; k < n_list.size(); k++)
{
n2 = n_list[k];
for (int l = 0; l < input.size(); l++)
{
if (n1==input[l].node1 && n2==input[l].node2)
{
Candidate.push_back(input[l]);
}
else if (n1==input[l].node2 && n2==input[l].node1)
{
Candidate.push_back(input[l]);
}
}
}
}
tmp = Candidate[0];
for (int j = 0; j < Candidate.size(); j++) //挑最小的
{
if (tmp.weighted>Candidate[j].weighted)
tmp = Candidate[j];
}
answer.push_back(tmp);
edge_count++;
bool flag = 0; //scan node1 in or not in
for (int j = 0; j < new_n_list.size(); j++)
{
if (tmp.node1 == new_n_list[j])
{
flag = 1;
break;
}
}
if (!flag)
{
new_n_list.push_back(tmp.node1);
for (int j = 0; j < n_list.size(); j++) //刪除另一個set裡面的東西
{
if (tmp.node1 == n_list[j])
{
n_list.erase(n_list.begin() + j);
break;
}
}
}
flag = 0; //scan node2 in or not in
for (int j = 0; j < new_n_list.size(); j++)
{
if (tmp.node2 == new_n_list[j])
{
flag = 1;
break;
}
}
if (!flag)
{
new_n_list.push_back(tmp.node2);
for (int j = 0; j < n_list.size(); j++)
{
if (tmp.node2 == n_list[j])
{
n_list.erase(n_list.begin() + j);
break;
}
}
}
for (int j = 0; j < input.size(); j++)
{
if ((tmp.node1 == input[j].node1) && (tmp.node2 == input[j].node2) && (tmp.weighted == input[j].weighted))
{
input.erase(input.begin() + j);
break;
}
}
Candidate.clear();
}
size = answer.size(); //印答案
for (int i = 0; i < size; i++)
{
cout << answer[i].node1 << "-" << answer[i].node2 << " " << answer[i].weighted << endl;
total_weighted = total_weighted + answer[i].weighted;
}
cout << "total weighted = " << total_weighted << endl;
return 0;
}
void split(string input, vector<link>* data)
{
int dash_pos, space_pos;
int str_len = input.length();
link push_back;
string tmp = "";
for (int i = 0; i < str_len; i++) //找 - 位置
{
if (input[i] == '-')
{
dash_pos = i;
break;
}
}
for (int i = dash_pos + 1; i < str_len; i++)//找 空白 位置
{
if (input[i] == ' ')
{
space_pos = i;
break;
}
}
for (int j = 0; j < dash_pos; j++)
tmp = tmp + input[j];
push_back.node1 = tmp;
tmp = "";
for (int j = dash_pos + 1; j < space_pos; j++)
tmp = tmp + input[j];
push_back.node2 = tmp;
tmp = "";
for (int j = space_pos + 1; j < str_len; j++)
tmp = tmp + input[j];
push_back.weighted = atoi(tmp.c_str());
data->push_back(push_back);
}
int count_node(vector<link>* data, vector<string>* node_set) //算點數 同時做出點的list
{
int count = 0;
int size = data->size();
int len;
for (int i = 0; i < size; i++)
{
link tmp = (*data)[i];
string node1 = tmp.node1;
string node2 = tmp.node2;
bool node1_flag = 0, node2_flag = 0;
len = node_set->size();
for (int j = 0; j < len; j++)
{
if (node1 == (*node_set)[j])
{
node1_flag = 1;
break;
}
}
if (node1_flag == 0)
{
(*node_set).push_back(node1);
count++;
}
len = (*node_set).size();
for (int k = 0; k < len; k++)
{
if (node2 == (*node_set)[k])
{
node2_flag = 1;
break;
}
}
if (node2_flag == 0)
{
(*node_set).push_back(node2);
count++;
}
}
return count;
}
#include<string>
#include<vector>
using namespace std;
struct link{
string node1;
string node2;
int weighted;
};
void split(string, vector<link>*);
int count_node(vector<link>*, vector<string>*);
int main()
{
vector<link>input; //原始input
vector<string>n_list; //node的list
vector<string>new_n_list; //node的list
vector<link>Candidate;
vector<link>answer; //最後要輸出的結果
string command; //每一行輸入
int size, edge_count = 0, node_count;
while (true)
{
getline(cin, command);
if (command == "exit")
break;
split(command, &input);
}
node_count = count_node(&input, &n_list); //算有幾個點 & 做出點的list
/////prim//////
int total_weighted = 0;
link tmp;
new_n_list.push_back(n_list[0]); //以第一個當作起點
n_list.erase(n_list.begin());
for (int i = 0; edge_count != (node_count - 1); i++)
{
string n1, n2;
for (int j = 0; j < new_n_list.size(); j++) //需要想法QAQ
{
n1 = new_n_list[j];
for (int k = 0; k < n_list.size(); k++)
{
n2 = n_list[k];
for (int l = 0; l < input.size(); l++)
{
if (n1==input[l].node1 && n2==input[l].node2)
{
Candidate.push_back(input[l]);
}
else if (n1==input[l].node2 && n2==input[l].node1)
{
Candidate.push_back(input[l]);
}
}
}
}
tmp = Candidate[0];
for (int j = 0; j < Candidate.size(); j++) //挑最小的
{
if (tmp.weighted>Candidate[j].weighted)
tmp = Candidate[j];
}
answer.push_back(tmp);
edge_count++;
bool flag = 0; //scan node1 in or not in
for (int j = 0; j < new_n_list.size(); j++)
{
if (tmp.node1 == new_n_list[j])
{
flag = 1;
break;
}
}
if (!flag)
{
new_n_list.push_back(tmp.node1);
for (int j = 0; j < n_list.size(); j++) //刪除另一個set裡面的東西
{
if (tmp.node1 == n_list[j])
{
n_list.erase(n_list.begin() + j);
break;
}
}
}
flag = 0; //scan node2 in or not in
for (int j = 0; j < new_n_list.size(); j++)
{
if (tmp.node2 == new_n_list[j])
{
flag = 1;
break;
}
}
if (!flag)
{
new_n_list.push_back(tmp.node2);
for (int j = 0; j < n_list.size(); j++)
{
if (tmp.node2 == n_list[j])
{
n_list.erase(n_list.begin() + j);
break;
}
}
}
for (int j = 0; j < input.size(); j++)
{
if ((tmp.node1 == input[j].node1) && (tmp.node2 == input[j].node2) && (tmp.weighted == input[j].weighted))
{
input.erase(input.begin() + j);
break;
}
}
Candidate.clear();
}
size = answer.size(); //印答案
for (int i = 0; i < size; i++)
{
cout << answer[i].node1 << "-" << answer[i].node2 << " " << answer[i].weighted << endl;
total_weighted = total_weighted + answer[i].weighted;
}
cout << "total weighted = " << total_weighted << endl;
return 0;
}
void split(string input, vector<link>* data)
{
int dash_pos, space_pos;
int str_len = input.length();
link push_back;
string tmp = "";
for (int i = 0; i < str_len; i++) //找 - 位置
{
if (input[i] == '-')
{
dash_pos = i;
break;
}
}
for (int i = dash_pos + 1; i < str_len; i++)//找 空白 位置
{
if (input[i] == ' ')
{
space_pos = i;
break;
}
}
for (int j = 0; j < dash_pos; j++)
tmp = tmp + input[j];
push_back.node1 = tmp;
tmp = "";
for (int j = dash_pos + 1; j < space_pos; j++)
tmp = tmp + input[j];
push_back.node2 = tmp;
tmp = "";
for (int j = space_pos + 1; j < str_len; j++)
tmp = tmp + input[j];
push_back.weighted = atoi(tmp.c_str());
data->push_back(push_back);
}
int count_node(vector<link>* data, vector<string>* node_set) //算點數 同時做出點的list
{
int count = 0;
int size = data->size();
int len;
for (int i = 0; i < size; i++)
{
link tmp = (*data)[i];
string node1 = tmp.node1;
string node2 = tmp.node2;
bool node1_flag = 0, node2_flag = 0;
len = node_set->size();
for (int j = 0; j < len; j++)
{
if (node1 == (*node_set)[j])
{
node1_flag = 1;
break;
}
}
if (node1_flag == 0)
{
(*node_set).push_back(node1);
count++;
}
len = (*node_set).size();
for (int k = 0; k < len; k++)
{
if (node2 == (*node_set)[k])
{
node2_flag = 1;
break;
}
}
if (node2_flag == 0)
{
(*node_set).push_back(node2);
count++;
}
}
return count;
}
2014年3月29日 星期六
spanning tree Kruskal C++
example input :
====================================
a-b 2
b-c 4
c-f 5
e-f 5
d-e 2
d-a 4
d-b 4
b-e 3
b-f 1
exit
===================================
#include <iostream>
#include<string>
#include<vector>
using namespace std;
struct link{
string node1;
string node2;
int weighted;
};
void split(string,vector<link>*);
void sort(vector<link>*);
int count_node(vector<link>*, vector<string>*);
int main()
{
vector<link>input; //原始input
vector<string>n_list; //node的list
vector<link>answer; //最後要輸出的結果
string command; //每一行輸入
int size,edge_count=0,node_count;
while (true)
{
getline(cin, command);
if (command == "exit")
break;
split(command, &input);
}
sort(&input); //根據權重由小到大排
node_count = count_node(&input,&n_list); //算有幾個點 & 做出點的list
int *Visited = new int[node_count]; //建立node set概念用
for (int i = 0; i < node_count; i++)
Visited[i] = 0;
link tmp;
int node1_pos,node2_pos,total_weighted=0;
int min,bigger;
for (int i = 0;edge_count != node_count-1 ; i++) //找出答案
{
tmp = input[i];
for (int j = 0; j < node_count; j++)
{
if (tmp.node1 == n_list[j])
{
node1_pos = j;
break;
}
}
for (int j = 0; j < node_count; j++)
{
if (tmp.node2 == n_list[j])
{
node2_pos = j;
break;
}
}
if ((Visited[node1_pos] == 0) && (Visited[node2_pos] == 0))
{
Visited[node1_pos] = i+1;
Visited[node2_pos] = i+1;
answer.push_back(tmp);
edge_count++;
total_weighted = total_weighted + tmp.weighted;
}
else if (Visited[node1_pos] == 0 || Visited[node2_pos]==0)
{
if (Visited[node1_pos] == 0)
Visited[node1_pos] = Visited[node2_pos];
else
Visited[node2_pos] = Visited[node1_pos];
answer.push_back(tmp);
edge_count++;
total_weighted = total_weighted + tmp.weighted;
}
else if (Visited[node1_pos] != 0 && Visited[node2_pos] != 0 && Visited[node1_pos] != Visited[node2_pos])
{
if (Visited[node1_pos] > Visited[node2_pos])
{
min = Visited[node2_pos];
bigger = Visited[node1_pos];
}
else
{
min = Visited[node1_pos];
bigger = Visited[node2_pos];
}
for (int k = 0; k < node_count; k++)
{
if (Visited[k] == bigger)
Visited[k] = min;
}
answer.push_back(tmp);
edge_count++;
total_weighted = total_weighted + tmp.weighted;
}
else
;
}
size = answer.size(); //印答案
for (int i = 0; i < size; i++)
cout << answer[i].node1 << "-" << answer[i].node2 << " " << answer[i].weighted << endl;
cout << "total weighted = " << total_weighted << endl;
return 0;
}
void split(string input, vector<link>* data)
{
int dash_pos, space_pos;
int str_len = input.length();
link push_back;
string tmp = "";
for (int i = 0; i < str_len; i++) //找 - 位置
{
if (input[i]=='-')
{
dash_pos = i;
break;
}
}
for (int i = dash_pos + 1; i < str_len; i++)//找 空白 位置
{
if (input[i] == ' ')
{
space_pos = i;
break;
}
}
for (int j = 0; j < dash_pos; j++)
tmp = tmp + input[j];
push_back.node1 = tmp;
tmp = "";
for (int j = dash_pos + 1; j < space_pos; j++)
tmp = tmp + input[j];
push_back.node2 = tmp;
tmp = "";
for (int j = space_pos + 1; j < str_len; j++)
tmp = tmp + input[j];
push_back.weighted = atoi(tmp.c_str());
data->push_back(push_back);
}
void sort(vector<link>* data)
{
int size = data->size();
link tmp;
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size - 1; j++)
{
if ((*data)[j].weighted >(*data)[j+1].weighted)
{
tmp = (*data)[j];
(*data)[j] = (*data)[j + 1];
(*data)[j + 1] = tmp;
}
}
}
}
int count_node(vector<link>* data, vector<string>* node_set) //算點數 同時做出點的list
{
int count = 0;
int size = data->size();
int len;
for (int i = 0; i < size; i++)
{
link tmp = (*data)[i];
string node1 = tmp.node1;
string node2 = tmp.node2;
bool node1_flag = 0, node2_flag = 0;
len = node_set->size();
for (int j = 0; j < len; j++)
{
if (node1 == (*node_set)[j])
{
node1_flag = 1;
break;
}
}
if (node1_flag == 0)
{
(*node_set).push_back(node1);
count++;
}
len = (*node_set).size();
for (int k = 0; k < len; k++)
{
if (node2 == (*node_set)[k])
{
node2_flag = 1;
break;
}
}
if (node2_flag == 0)
{
(*node_set).push_back(node2);
count++;
}
}
return count;
}
====================================
a-b 2
b-c 4
c-f 5
e-f 5
d-e 2
d-a 4
d-b 4
b-e 3
b-f 1
exit
===================================
#include <iostream>
#include<string>
#include<vector>
using namespace std;
struct link{
string node1;
string node2;
int weighted;
};
void split(string,vector<link>*);
void sort(vector<link>*);
int count_node(vector<link>*, vector<string>*);
int main()
{
vector<link>input; //原始input
vector<string>n_list; //node的list
vector<link>answer; //最後要輸出的結果
string command; //每一行輸入
int size,edge_count=0,node_count;
while (true)
{
getline(cin, command);
if (command == "exit")
break;
split(command, &input);
}
sort(&input); //根據權重由小到大排
node_count = count_node(&input,&n_list); //算有幾個點 & 做出點的list
int *Visited = new int[node_count]; //建立node set概念用
for (int i = 0; i < node_count; i++)
Visited[i] = 0;
link tmp;
int node1_pos,node2_pos,total_weighted=0;
int min,bigger;
for (int i = 0;edge_count != node_count-1 ; i++) //找出答案
{
tmp = input[i];
for (int j = 0; j < node_count; j++)
{
if (tmp.node1 == n_list[j])
{
node1_pos = j;
break;
}
}
for (int j = 0; j < node_count; j++)
{
if (tmp.node2 == n_list[j])
{
node2_pos = j;
break;
}
}
if ((Visited[node1_pos] == 0) && (Visited[node2_pos] == 0))
{
Visited[node1_pos] = i+1;
Visited[node2_pos] = i+1;
answer.push_back(tmp);
edge_count++;
total_weighted = total_weighted + tmp.weighted;
}
else if (Visited[node1_pos] == 0 || Visited[node2_pos]==0)
{
if (Visited[node1_pos] == 0)
Visited[node1_pos] = Visited[node2_pos];
else
Visited[node2_pos] = Visited[node1_pos];
answer.push_back(tmp);
edge_count++;
total_weighted = total_weighted + tmp.weighted;
}
else if (Visited[node1_pos] != 0 && Visited[node2_pos] != 0 && Visited[node1_pos] != Visited[node2_pos])
{
if (Visited[node1_pos] > Visited[node2_pos])
{
min = Visited[node2_pos];
bigger = Visited[node1_pos];
}
else
{
min = Visited[node1_pos];
bigger = Visited[node2_pos];
}
for (int k = 0; k < node_count; k++)
{
if (Visited[k] == bigger)
Visited[k] = min;
}
answer.push_back(tmp);
edge_count++;
total_weighted = total_weighted + tmp.weighted;
}
else
;
}
size = answer.size(); //印答案
for (int i = 0; i < size; i++)
cout << answer[i].node1 << "-" << answer[i].node2 << " " << answer[i].weighted << endl;
cout << "total weighted = " << total_weighted << endl;
return 0;
}
void split(string input, vector<link>* data)
{
int dash_pos, space_pos;
int str_len = input.length();
link push_back;
string tmp = "";
for (int i = 0; i < str_len; i++) //找 - 位置
{
if (input[i]=='-')
{
dash_pos = i;
break;
}
}
for (int i = dash_pos + 1; i < str_len; i++)//找 空白 位置
{
if (input[i] == ' ')
{
space_pos = i;
break;
}
}
for (int j = 0; j < dash_pos; j++)
tmp = tmp + input[j];
push_back.node1 = tmp;
tmp = "";
for (int j = dash_pos + 1; j < space_pos; j++)
tmp = tmp + input[j];
push_back.node2 = tmp;
tmp = "";
for (int j = space_pos + 1; j < str_len; j++)
tmp = tmp + input[j];
push_back.weighted = atoi(tmp.c_str());
data->push_back(push_back);
}
void sort(vector<link>* data)
{
int size = data->size();
link tmp;
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size - 1; j++)
{
if ((*data)[j].weighted >(*data)[j+1].weighted)
{
tmp = (*data)[j];
(*data)[j] = (*data)[j + 1];
(*data)[j + 1] = tmp;
}
}
}
}
int count_node(vector<link>* data, vector<string>* node_set) //算點數 同時做出點的list
{
int count = 0;
int size = data->size();
int len;
for (int i = 0; i < size; i++)
{
link tmp = (*data)[i];
string node1 = tmp.node1;
string node2 = tmp.node2;
bool node1_flag = 0, node2_flag = 0;
len = node_set->size();
for (int j = 0; j < len; j++)
{
if (node1 == (*node_set)[j])
{
node1_flag = 1;
break;
}
}
if (node1_flag == 0)
{
(*node_set).push_back(node1);
count++;
}
len = (*node_set).size();
for (int k = 0; k < len; k++)
{
if (node2 == (*node_set)[k])
{
node2_flag = 1;
break;
}
}
if (node2_flag == 0)
{
(*node_set).push_back(node2);
count++;
}
}
return count;
}
2014年3月9日 星期日
UVA 12468 C++
#include <iostream>
using namespace std;
int main()
{
int a, b;
while (cin >> a, cin >> b)
{
if (a == -1 && b == -1)
break;
if (a > b)
{
if ((a - b) > 50)
cout << b + 100 - a << endl;
else
cout << a - b << endl;
}
else
{
if ((b - a) > 50)
cout << a + 100 - b << endl;
else
cout << b - a << endl;
}
}
return 0;
}
using namespace std;
int main()
{
int a, b;
while (cin >> a, cin >> b)
{
if (a == -1 && b == -1)
break;
if (a > b)
{
if ((a - b) > 50)
cout << b + 100 - a << endl;
else
cout << a - b << endl;
}
else
{
if ((b - a) > 50)
cout << a + 100 - b << endl;
else
cout << b - a << endl;
}
}
return 0;
}
訂閱:
文章 (Atom)