刚刚做完网易笔试题,就写出了两题,趁脑子还清醒,写下来记住。
第一题代码:
#include<iostream>
using namespace std;
int main()
{
int M, N, x, y, i, j;
cin >> M >> N;
int *a = new int[M];
for (i = 0; i < M; i++)
a[i] = 0;//初始化硬币起始状态
while (N != 0) {
--N;
cin >> x >> y;
for (j = x - 1; j < y; j++)
a[j]++;
}
for (int num = 0; num < M; num++) {
a[num] %= 2;
cout << a[num];
}
return 0;
}
不懂是什么意思,把网上公式随便抄了一遍。。
第三题代码:
#include <iostream>
#include <queue>
using namespace std;
const int maxSize = 101;
int visit[maxSize] = { 0 };
int main()
{
void DFS(int a[maxSize][maxSize], int n, int v);
int graph[maxSize][maxSize] = { 0 };
int n, m;
cin >> n >> m;
if (n <= 1) {
cout << 0;
return 0;
}
if (m == 0) {
cout << n - 1;
return 0;
}
int a, b;
while (m) {
m--;
cin >> a >> b;
graph[a][b] = 1;
graph[b][a] = 1;
}
int nums = 0; //联通子图个数
for (int i = 1; i <= n; i++) {
if (visit[i] == 0) {
DFS(graph, n, i);
nums++;
}
}
nums--;
cout << nums << endl;
return 0;
}
void DFS(int a[maxSize][maxSize], int n, int v)
{
int First(int a[maxSize][maxSize], int n, int v);
int Next(int a[maxSize][maxSize], int n, int v, int j);
int w;
visit[v] = 1;
for (w = First(a, n, v); w > 0; w = Next(a, n, v, w)) {
if (!visit[w])
DFS(a, n, w);
}
}
int First(int a[maxSize][maxSize], int n, int v)
{
int j = 1;
while (j <= n && a[v][j] == 0)
j++;
if (j > n)
return 0;
return j;
}
int Next(int a[maxSize][maxSize], int n, int v, int j)
{
int w = j + 1;
while (w <= n && a[v][w] == 0)
w++;
if (w > n)
return 0;
return w;
}
第四题:
想当然地以为是判断输入的字符串有几个不同的字符就行了,但这种思路貌似不对,通过率仅为2%。
祝自己好运。