#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
struct Node{
Node *left;
Node *right;
Node * sibling;
int value;
};
void createTree(Node *&root){
int x;
cin >> x;
if(x == 0)
root = NULL;
else{
root = new Node;
root->sibling = NULL;
root->value = x;
createTree(root->left);
createTree(root->right);
}
}
void printTree(Node *root){
if(root){
cout << root->value << " ";
printTree(root->left);
printTree(root->right);
}
}
Node *Connect(Node *root){
Node *head,*p,*pre;
head = root;
while(1){
p = head;
while(p){
if(p->left){
pre = head = p->left;
break;
}else if(p->right){
pre = head = p->right;
break;
}else
p = p->sibling;
}
if(!p)
break;
while(p){
if(p->left){
pre->sibling = p->left;
pre = p->left;
}
if(p->right){
pre->sibling = p->right;
pre = p->right;
}
p = p->sibling;
}
}
return head;
}
int main(int argc, char const *argv[]){
Node *root;
createTree(root);
printTree(root);
cout << endl;
Connect(root);
return 0;
}
#include <stdio.h> #include <string.h> int ans[100][100]; void print(int n){ int count = 1,i=0,j= 0; ans[0][0] = 1; ans[n - 1][n - 1] = n * n; while(count < n * n - 1){ if(i == 0 && j < n-1 ){ ans[i][++j] = ++count; while(j >= 1) ans[++i][--j] = ++count; } if(j == 0 && i < n-1 ){ ans[++i][j] = ++count; while(i >= 1) ans[--i][++j] = ++count; } if(i == n - 1 && j < n-1){ ans[i][++j] = ++count; while(j < n - 1) ans[--i][++j] = ++count; } if(j == n - 1 && i < n - 1){ ans[++i][j] = ++count; while(i < n - 1) ans[++i][--j] = ++count; } } } int main(){ int n; while(scanf("%d",&n) != EOF){ memset(ans,0,sizeof(ans)); print(n); int i,j; for(i = 0;i < n;i++){ for(j = 0;j < n;j++) printf("%2d ",ans[i][j]); printf("\n"); } } return 1; }
#include <stdio.h>
int main(){
int n;
while(scanf("%d",&n) != EOF){
for(int i = 0;i < n;i++){
for(int j = 0;j < n;j++){
int m = i + j + 1; //
int min,max,ans = 0;
if(m > n){
min = n * n - (2 * n - m + 1) * (2 * n - m) / 2 + 1;
max = n * n - (2 * n - m - 1) * (2 * n - m) / 2;
if(m % 2)
ans = max - (n - 1 - j);
else
ans = min + (n - 1 - j);
}else{
min = m * (m - 1) / 2 + 1;
max = m * (m + 1) / 2;
if(m % 2)
ans = max - i;
else
ans = min + i;
}
printf("%3d ",ans);
}
printf("\n");
}
}
}
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
struct Node{
Node *next;
int value;
};
void createList(Node *&head){
int x;
Node *p,*s;
head = new Node;
head->next = NULL;
cin >> x;
while(x > 0){
s = new Node;
s->next = NULL;
s->value = x;
if(head->next == NULL)
head->next = s;
else
p->next = s;
p = s;
cin >> x;
}
}
void printList(Node *head){
Node *p = head->next;
while(p){
cout << p->value << " ";
p = p->next;
}
cout << endl;
}
void mergeTwo(Node *&A,Node* B){
Node *p,*pre,*q,*r;
pre = A;
p = A->next;
r = q = B->next;
while(p && q){
if(p->value < q->value){
pre = pre->next;
p = p->next;
}else{
q = q->next;
r->next = pre->next;
pre->next = r;
pre = pre->next;
r = q;
}
}
if(q){
pre->next = q;
}
}
Node *merge(int n,Node* lists[]){
for(int i = 1;i < n;i++){
mergeTwo(lists[0],lists[i]);
}
return lists[0];
}
int main(int argc, char const *argv[]){
Node* lists[5];
for(int i = 0;i < 5;i++)
createList(lists[i]);
merge(5,lists);
printList(lists[0]);
system("pause");
return 0;
}